Moment.js проблемы с .format (), используя время Зулу - PullRequest
0 голосов
/ 30 мая 2018

Я работаю над сценарием, который должен извлечь и сохранить метку времени из базы данных.Временная метка из базы данных извлекается в виде строки в формате UTC Zulu "YYYY-MM-DDTHH: MM: SS.SSSZ".Я хочу сохранить эту метку времени в формате «ГГГГ-ММ-ДДТЧ: ММ: СС.ССС» по местному времени.В настоящее время я пытаюсь сделать это с помощью moment.js, у меня был небольшой успех с ".toISOString ()" и другими методами.

Однако я заметил, что вывод из "moment (timestamp) .format() "не возвращает строку, которую я ожидаю из того, что я до сих пор понимаю о UTC.Вот пример кода, который повторяет мою проблему:

var moment = require('moment');

var timestamp = new Date('2018-05-30T15:01:01.111Z');

console.log(timestamp);
console.log(moment(timestamp).format('YYYY-MM-DDTHH:mm:ss.sss'));
console.log(moment(timestamp).format('YYYY-MM-DDTHH:MM:SS.SSS'));

Это мой вывод:

2018-05-30T15:01:01.111Z
2018-05-30T16:01:01.011
2018-05-30T16:05:11.111

Это мой ожидаемый результат:

2018-05-30T15:01:01.111Z
2018-05-30T16:01:01.111
2018-05-30T16:01:01.111

Почемуизменение регистра «YYYY-MM-DDTHH: mm: ss.sss» на «YYYY-MM-DDTHH: MM: SS.SSS» в .format () вызывает другой вывод?Является ли мой ожидаемый вывод правильным или имеет неправильно понятый момент (временная метка) .format ()?Наконец, есть ли лучший способ достичь ожидаемого результата с учетом обстоятельств?

1 Ответ

0 голосов
/ 30 мая 2018

http://momentjs.com/docs/#/displaying/format/

ММ - месяцы, поэтому вы получили 2018-05-30T16:05:11.111 5

нет sss, но есть SSS

Вы сказали, что хотите в этом формате «ГГГ-ММ-ДДТЧ: ММ: СС.ССС». Я полагаю, ММ вы имеете в виду минут из-за ожидаемого результата.Это странный способ сохранить дату, так как месяцев нет, и она повторяется в секундах.

Я бы предложил хранить в UTC.

var timestamp = new Date('2018-05-30T15:01:01.111Z');

console.log(timestamp);
console.log(moment(timestamp).format('YYYY-MM-DDTHH:mm:ss:SSS'));

// i'd suggest UTC over formating but if you were i'd use
console.log(moment(timestamp).format('YYYY-MM-DDTHH:MM:mm:SSS'));
//2018-05-30T15:01:01.111Z
//2018-05-30T16:01:01.111
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.js"></script>

Пожалуйста, дайте мне знать, если вы этого хотите.

...