MomentJs格式落后一天

时间:2019-05-10 14:50:04

标签: javascript date momentjs

我看到了一个与我的问题类似的问题(Moment.js sets dates to 1 day behind),但我似乎无法应用。

基本上,我的日期是这样解析的:

var date = moment("2019-05-27T00:00:00Z"); // date is the 27th

当我格式化它以获取日期,期望27日时,我反而收到了26日!

date.format("DD")

有人知道为什么会发生这种情况以及如何纠正它吗?

http://jsfiddle.net/rmdxj26e/

enter image description here

2 个答案:

答案 0 :(得分:4)

问题是解析日期的格式。 Z字母表示它是一个“祖鲁时间”(UTC)。我不知道您的时区是什么,但是日期会转换为您的时区。

您可以解析本地时间格式(不使用Z),并且该格式应该正确显示。

因此,带有解释的完整代码:

var date = moment("2019-05-27T00:00:00"); // date is the 27th in local time
$('#date').append($('<p>').html(date.utc().format("DD"))); // can display 26th or 27th depends on local timezone on the PC
$('#date').append($('<p>').html(date.local().format("DD"))); // is still local so it will be 27th

答案 1 :(得分:1)

您必须使用moment.utc()Moment documentation说:

  

默认情况下,时刻会解析并以当地时间显示。

     

如果要解析或显示UTC时间,可以使用   moment.utc()而不是moment()。

     

这为我们带来了Moment.js的有趣功能。 UTC模式。

     

在UTC模式下,所有显示方法将以UTC时间显示   而不是当地时间。

moment().format();     // 2013-02-04T10:35:24-08:00  
moment.utc().format(); // 2013-02-04T18:35:24+00:00

jsFiddle输出

enter image description here

实时示例:

var date = moment.utc("2019-05-27T00:00:00Z");
$('#date').append($('<p>').html(date.format("DD")));
$('#date').append($('<p>').html(date.local().format("DD")));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="date"></div>