Формат MomentJs один день позади - PullRequest
1 голос
/ 10 мая 2019

Я видел вопрос, похожий на мой ( Moment.js устанавливает даты на 1 день позади ), но я не могу его применить.

По сути, моя дата анализируется так:

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 ]

4 голосов
/ 10 мая 2019

Проблема в формате проанализированной даты. Буква 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 голос
/ 10 мая 2019

Вы должны использовать moment.utc () , документация Момента гласит:

По умолчанию момент анализируется и отображается по местному времени.

Если вы хотите проанализировать или отобразить момент в UTC, вы можете использовать Момент.utc () вместо момента ().

Это подводит нас к интересной особенности 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>
...