我看到了一个与我的问题类似的问题(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")
有人知道为什么会发生这种情况以及如何纠正它吗?
答案 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输出:
实时示例:
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>