我将"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
。
它会在每个日期添加一天。我怀疑某个基于时区的问题,但我无法弄清楚。
答案 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>