unix-timestamp与ISO时间之间的关系。他们为什么不平等?

时间:2018-01-08 09:10:14

标签: javascript momentjs

我正在尝试获取January 1, 2018

的时间戳
moment("01-01-2018","MM-DD-YYYY").unix()

来自上述陈述的内容为1514745000。但是当我尝试将其转换为ISOString时:

moment.unix(1514745000).toISOString()

它归结为:2017-12-31T18:30:00.000Z

为什么会这样?为什么它不等于2018-01-01T00:00:00.000Z

1 个答案:

答案 0 :(得分:3)

  

默认情况下,时刻会以当地时间进行分析和显示。

Moment默认使用本地时间,而toISOString输出为UTC:

  

请注意,.toISOString()会返回UTC时间戳,即使有问题的时刻处于本地模式。

如果您想将"01-01-2018"解析为UTC使用moment.utc

此处显示了在本地模式和UTC模式下解析之间的输出差异的示例:

// Local 01-01-2018 : 1514761200 (UTC+01:00)
console.log( moment("01-01-2018","MM-DD-YYYY").unix() )
// UTC 01-01-2018: 1514764800
console.log( moment.utc("01-01-2018","MM-DD-YYYY").unix() )
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>

您可以在Local vs UTC vs Offset指南中找到更多信息。