moment js返回iso时间戳的错误格式化值

时间:2018-02-02 07:54:17

标签: javascript momentjs

我将"2018-01-31T22:55:02.907Z"此时间戳传递给moment()函数,但在格式化日期部分后返回错误的值。

console.log(moment("2018-01-31T22:55:02.907Z").format('YYYY-MM-DD'));

这应该返回2018-01-31,而是返回2018-02-01

它会在每个日期添加一天。我怀疑某个基于时区的问题,但我无法弄清楚。

2 个答案:

答案 0 :(得分:3)

在传递时间戳时必须使用.utc,如下所示: 如果你这样做:

console.log(moment("2018-01-31").format('YYYY-MM-DD'));

它会给你想要的结果但是当你像现在这样通过时间戳时,你应该做的是:

console.log(moment.utc("2018-01-31T22:55:02.907Z").format('YYYY-MM-DD'));

您还可以看到它的工作原理:

console.log(moment({ years:2018, months:0, date:31, hours:22, minutes:55, seconds:02, milliseconds:907}).format('YYYY-MM-DD'));

要传递时间戳,您应该再次检查文档。 https://momentjs.com/docs/#/parsing/unix-timestamp-milliseconds/

这也可能是一个有用的链接: https://coderwall.com/p/exrbag/use-momentjs-to-parse-unix-timestamps

答案 1 :(得分:3)

您必须使用moment.utc()

  

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

     

如果您想以UTC格式解析或显示片刻,可以使用moment.utc()代替moment()

console.log(moment("2018-01-31T22:55:02.907Z").format('YYYY-MM-DD'));
console.log(moment.utc("2018-01-31T22:55:02.907Z").format('YYYY-MM-DD'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>