在我的新工作场所中,它们表示很多日期为“自纪元以来的天数”(以下将其称为DSE)。我遇到了JavaScript的问题,即从epoch(UNIX时间戳)转换为DSE到秒。这是我执行转换的功能:

function daysToTimestamp(days) {
    return Math.round(+days * 86400);
}


举例来说,当我通过13878(预计代表2008年1月1日)时,我会得到1199059200,而不是我期望的1199098800。为什么?

最佳答案

1199059200代表2007年12月31日在UTC。示例Python会话:

>>> import time
>>> time.gmtime(1199059200)
(2007, 12, 31, 0, 0, 0, 0, 365, 0)


请记住,所有time_t值均针对UTC。 :-)您必须相应地调整您的时区。

编辑:由于您和我都在新西兰,所以这可能是您获得1199098800价值的方式:

>>> time.localtime(1199098800)
(2008, 1, 1, 0, 0, 0, 1, 1, 1)


之所以如此,是因为在新年(新西兰的夏季),这里的时区是+1300。做数学看看。 :-)

对于2008年1月1日在UTC,将86400添加到1199059200,得到1199145600。

>>> time.gmtime(1199145600)
(2008, 1, 1, 0, 0, 0, 1, 1, 0)

10-06 07:44