【发布时间】:2017-12-26 21:34:06
【问题描述】:
我有一张包含 unix 纪元时间列的表格(以秒为单位):1500598288
如何将这些转换为正常日期?
【问题讨论】:
-
工作表将在哪个时区显示此日期?不同的用户打开它吗?
标签: javascript datetime google-apps-script google-sheets epoch
我有一张包含 unix 纪元时间列的表格(以秒为单位):1500598288
如何将这些转换为正常日期?
【问题讨论】:
标签: javascript datetime google-apps-script google-sheets epoch
不需要任何 JS 编程的最简单方法是通过一个公式,除以每天 86400 秒并加上 1970 年 1 月 1 日。例如,以下给出 2017 年 7 月 21 日:
=1500598288/86400+date(1970,1,1)
要转换一整列数字,只需使用 ARRAYFORMULA:
=arrayformula(A:A/86400+date(1970,1,1))
【讨论】:
=(B71-date(1970,1,1))*86400
time(1, 0, 0) 以转到 UTC+1,或减去 time(1, 0, 0) 以转到UTC-1 等
使用 javascript Date function 创建自定义函数:
工具 > 脚本编辑器... >
function FROM_UNIX_EPOCH(epoch_in_secs) {
return new Date(epoch_in_secs * 1000); // Convert to milliseconds
}
然后在一个新列中你可以做=FROM_UNIX_EPOCH(A1)
【讨论】:
现在,距原始帖子 3 年后,您可以制作...
工具 > 脚本编辑器... >
function millisToDate(timeInMillis){
var yourDateFromMillis = new Date(timeInMillis);
return yourDateFromMillis;
}
并在单元格中使用您的新功能...
=millisToDate(cell here)
【讨论】:
在谷歌表格单元格中将 Epoch Timestamp 添加到 DateTime(GMT 调整)
=A1/86400+DATE(1970,1,1)+时间(5,30,0)
【讨论】:
在接受的答案的基础上,如果您希望能够比较日期,您将需要使用 FLOOR()
=FLOOR(1500598288/86400)+date(1970,1,1)
否则,一个单元格中的“7/21/2017”可能不等于另一个单元格中的“7/21/2017”。
【讨论】:
在 AppScript 中粘贴:
function EpocToDate(epoch) {
//var epoch = 1451606400000; 12/31/2015 19:00:00
return (Utilities.formatDate(new Date (epoch),'America/New_York','MM/dd/yyyy HH:mm:ss'));
}
在 Google 表格中用作:
=EpocToDate(1451606400000)
如果您必须从另一个单元格引用:
=EpocToDate(VALUE(C2))
【讨论】:
ttarchala 在答案中给出的公式不正确。这是一个更广泛的答案。
我建议不要替换自纪元以来的秒数列中的数据。您可能需要它进行排序等。此外,将公式应用于整个列将很困难。相反,最初在它旁边插入一个新列。
单击与最顶层 epoch 单元相邻的新单元。假设最上面的纪元单元格是 A1,则将此公式输入到新单元格的公式框中。
=A1/8640000+date(1970,1,1)
日期时间应显示在新单元格中。默认情况下,它只会显示日期而不显示时间。要使其也显示时间,您需要更改单元格格式。选择新的日期单元格后,单击 123 格式下拉菜单并选择所需的单元格格式。
要将此公式应用于列中的所有单元格,请单击日期/时间单元格右下角的黑色小方块(手柄)并将其拖动到列底部。释放拖动后,列应填充其相邻纪元数据单元格的日期时间转换。当您单独选择每个单元格时,您可以看到公式中的纪元数据单元格索引发生了变化。
【讨论】: