При создании момента из строки мы сначала проверяем, соответствует ли строка известным ISO 8601 форматам, затем мы проверяем, соответствует ли строка RFC 2822 Дата и времяформат, прежде чем перейти к отступлению от новой даты (строки), если известный формат не найден.
Момент принимает форматы ISO 8601 и RFC 2822 для строковых параметров, и вы вводите /Date(1538560800000+0200)/
ни.Тем не менее, когда вы передаете это в moment
, он пытается преобразовать это в строку и заканчивает тем, что извлекает возможный параметр метки времени, который равен 1538560800000
.Это можно увидеть в следующем коде, так как оба значения заканчиваются одинаковыми значениями.
let d = '/Date(1538560800000+0200)/'
moment(d).toString() // Wed Oct 03 2018 12:00:00 GMT+0200
moment(1538560800000).toString() // Wed Oct 03 2018 12:00:00 GMT+0200
1538560800000
при преобразовании в GMT - ср. 03 октября 2018 г. 10:00:00 по Гринвичу + 0000, отсюдавывод следующего кода ..
moment.utc(d).toString() // Wed Oct 03 2018 10:00:00 GMT+0000
Итак, ни при каких обстоятельствах вы никогда не получите время как 14:00:00, поскольку эта временная метка не представляет этого.И отметки времени всегда абсолютны (в GMT), нет такой вещи, как местная отметка времени .
Я чувствую, что разрыв здесь - ваша неправильная интерпретация вводимой строки, вы думаете ..
- Преобразование
1538560800000
в местное время, которое является 3 октября, 12:00:00 (местное) - Добавить
+0200
часы до него, что означает перевести его на 3 октября, 14: 00: 00
Но, правильный способ читать это ..
- Преобразовать
1538560800000
в дату и время, то есть 3 октября, 10:00:00 (абсолютное время / время по Гринвичу) +0200
представляет часовой пояс источника, который равен GMT+0200
.
Опять же, первая интерпретация неверна по причине, указанной выше - метки времени unix всегда в GMT , они никогда не в местных часовых поясах.