Как преобразовать дату и время из формата ISO в часовой пояс UTC?

Я использую moment.js и хочу преобразовать дату и время в формате ISO в часовой пояс UTC.

Я могу преобразовать местное время в формат UTC+ISO, но я не могу преобразовать формат ISO в часовой пояс UTC.

Вход:

2018-03-22T00:00:00Z

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

дата должна быть в часовом поясе UTC. Если я рассчитываю, это должно быть:

22018-03-21T18:30:00Z
  1. Сначала я хочу преобразовать в ISO, а затем преобразовать в UTC **.

Не удается преобразовать местную дату и время в формат ISO, а затем в формат UTC

Мы можем конвертировать в строку, а из формата ISO можем конвертировать или нет?

Пример Fox: я хочу преобразовать ISODATE(2018-03-22T00:00:00Z) в часовой пояс UTC.

function toISO(dt) {
  return moment(dt).format("YYYY-MM-DDTHH:mm:ss") + "Z";
}
var date = new Date();
var isoDate= toISO(date)

Прямая конвертация

function toISOWithUtc(dt) {
      return moment(dt).utc().format("YYYY-MM-DDTHH:mm:ss") + "Z";
}
var date = new Date();
toISO(date)

person Varun Sharma    schedule 22.03.2018    source источник
comment
Пожалуйста, включите входы и ожидаемые результаты для каждого входа.   -  person Igor    schedule 22.03.2018
comment
@Igor преобразовать в UTC.. 2018-03-22T00:00:00Z   -  person Varun Sharma    schedule 22.03.2018
comment
Позвольте мне перефразировать: отредактировать ваш вопрос, включить входные данные и соответствующие ожидаемые результаты. Если вы действительно хотите быть полезными тем, кто изучает вопрос, делайте это так, как если бы вы писали модульные тесты.   -  person Igor    schedule 22.03.2018
comment
Каким образом 2018-03-22T00:00:00Z не в дате должно быть в часовом поясе UTC? Опять же, напишите это так, как если бы вы писали модульный тест. Какой тип вы проверяете и каким должно быть его значение? На данный момент все еще очень неясно, что вы на самом деле спрашиваете/нуждаетесь.   -  person Igor    schedule 22.03.2018
comment
2018-03-22T00:00:00Z не является местным временем, Z в конце означает часовой пояс UTC.   -  person phuzi    schedule 22.03.2018


Ответы (1)


И 2018-03-22T00:00:00Z, и 2018-03-21T18:30:00Z уже указаны в формате UTC.

Обратите внимание на Z в конце? Это означает, что дата указана в формате UTC. Это не жестко закодированная буква, которую вы можете просто добавить в конец — она имеет особое значение, она говорит о том, что дата/время указаны в формате UTC.

Если вы хотите преобразовать эту дату UTC в другой часовой пояс (я предполагаю, что вы этого хотите), вы можете использовать moment.tz:

// convert UTC 2018-03-22T00:00:00Z to Asia/Kolkata timezone
moment.tz('2018-03-22T00:00:00Z','Asia/Kolkata')

Просто измените имя часового пояса на тот, который вы хотите преобразовать.

И вызов format() даст вам преобразованную дату/время в формате ISO8601:

moment.tz('2018-03-22T00:00:00Z','Asia/Kolkata').format() // 2018-03-22T05:30:00+05:30

Обратите внимание, что смещение изменилось с Z на +05:30. Это означает, что указанные выше дата/время на 5 часов и 30 минут опережают UTC, что является результатом преобразования 2018-03-22T00:00:00Z в часовой пояс Калькутты.

Примечание. Мне кажется, вы ошибаетесь в понятиях.

UTC — это стандарт времени. Он определяет такие вещи, как текущая дата/время по всему миру, использует атомные часы, чтобы убедиться, что все на Земле синхронизированы, и все часовые пояса основаны на смещениях от UTC.

ISO8601 – это стандарт обмена данными о дате и времени. Он определяет форматы (текстовые представления дат). Дата/время могут быть в формате ISO, независимо от того, в формате UTC или нет.

Вот почему "преобразование из UTC в ISO" (или наоборот) вообще не имеет смысла.

person pist    schedule 22.03.2018
comment
Есть два способа конвертировать.. function toISO(dt) { return moment(dt).format(YYYY-MM-DDTHH:mm:ss) + Z; } function toISOWithUtc(dt) { момент возврата(dt).utc().format(YYYY-MM-DDTHH:mm:ss) + Z; } - person Varun Sharma; 22.03.2018
comment
Сначала toISO конвертировать только в формат ISO, а не в UTC. Второй конвертируется в UTC и ISO - person Varun Sharma; 22.03.2018
comment
1- Если вы поставите Z в конце, это означает, что дата указана в формате UTC - проверьте ссылку в ответе выше. 2- UTC — это стандарт времени для определения таких вещей, как текущее время, и используемый часовыми поясами для определения местного времени во всех частях мира, в то время как ISO8601 определяет форматы (текстовые представления дат). Преобразование UTC в ISO вообще не имеет смысла: YYYY-MM-DDTHH:mm:ss - это формат ISO, независимо от того, находится он в UTC или нет. - person pist; 22.03.2018
comment
да вы правы. Я уже преобразовал в UTC неправильным способом. спасибо - person Varun Sharma; 23.03.2018