Как нам прекратить преобразование объекта даты и времени в формате UTC от преобразования в местное время? - PullRequest
0 голосов
/ 14 января 2019

Мне нужен объект даты и времени в формате UTC, а не строка времени в формате UTC.

Следующий код помогает мне получить время UTC в виде строки:

moment.parseZone(new Date()).utc().format()

Вывод кода выше:

"2019-01-14T12:43:23Z"

Это строка, которую я не хочу. То, что я хочу, это объект даты и времени. Вот как я преобразую строку даты-времени в объект даты-времени:

new Date(moment.parseZone(new Date()).utc().format())

К сожалению, вышеприведенный код снова включает вывод в местное время, пример которого показан ниже:

Mon Jan 14 2019 18:10:54 GMT+0530 (India Standard Time)

Как остановить преобразование объекта даты и времени в UTC в местное время?

Редактирование-01: Как выполнить вычисления с использованием объекта даты и времени по времени UTC?

Редактировать-02: Функциональное объяснение:

Есть люди с разными часовыми поясами. Мы знаем разницу во времени UTC. Я хочу построить таблицу времени каждого человека по местному времени.

Пример: Мой часовой пояс +5: 30 UTC (мое время в настоящее время 14.01.2009 21:00), а человек из Сан-Франциско имеет часовой пояс -8: 00 UTC (его / ее время в настоящее время 14.01.2009 7:30).

В настоящее время я пытаюсь добавить разницу во времени (-8: 00 UTC) к времени UTC, чтобы найти местное время человека в Сан-Франциско. Это не работает, потому что когда я преобразую строку даты и времени UTC в объект даты, она будет преобразована в местное время.

1 Ответ

0 голосов
/ 14 января 2019

У дат Javascript нет часового пояса! Это «статические» методы, которые вы используете для сериализации, которые незаметно применяют один. Тревожный вывод - это стандартный вывод Date.toString (), используемый в консоли. Базовая дата, вероятно, в порядке (вы просто создали ее из ничего, поэтому никаких проблем с десериализацией не возникает). Вам просто нужно указать метод UTC при сериализации. Попробуйте Date.toISOString() или Date.toLocaleDateString({},{timeZone:'UTC'})

редактировать после функционального объяснения ...

Хорошо, вот несколько вещей, которые вы можете сделать. Кеннеди был убит в 12:30 вечера 22 ноября 1963 года по центральному стандартному времени

// create a date object to represent this moment...
const byeByeKennedy = new Date("1963-11-22T12:30:00-06:00");

// this is a date object, representing a moment. We used a
// timezone for it's creation, but now it has no notion of timezone.

// if you want to know what time it was IN THE TIMEZONE OF THE USER, 
// just do toString(), or leave timezone blank. Formatting in the 
// timezone of the user is always the default in javascript.
// This does not mean that the Date intrinsically has a timezone though!
console.log('My local time when kennedy was killed... ' 
+ byeByeKennedy.toString());

// If we want to format this date with it's "original" timezone, we need
// to store the timezone separately, then use it again to serialize...
console.log('Local time in Dallas when Kennedy was killed... ' 
+ byeByeKennedy.toLocaleString({},{timeZone:"America/Chicago"}))

// If you, sitting in India, need to know what time it was for 
// your user in San Francisco when kennedy
// was killed, you need to supply the timezone of San Francisco...
console.log('Local time in San Francisco when Kennedy was killed... ' 
+ byeByeKennedy.toLocaleString({},{timeZone:"America/Los_Angeles"}))

// If you want to serialize this date, for example to send it to a server, use ISO...
console.log('Use ISO for serializing/sending... ' 
+ byeByeKennedy.toISOString());

// OR IF YOU JUST WANT TO KNOW WHAT TIME IT IS IN SAN FRANCISCO...
console.log('SAN FRANCISCO TIME NOW... '
+ new Date().toLocaleString({},{timeZone:"America/Los_Angeles"}))

Вы можете, если вам абсолютно необходимо, непосредственно добавить смещение часового пояса к дате, а затем отформатировать его, указав UTC, но это ужасная идея, поскольку вам потребуется управлять переходом на летнее время и другими тонкостями. Пожалуйста, не делай этого. Гораздо лучше быть действительно чётким в отношении часового пояса в момент создания, а затем всякий раз, когда вы форматируете.

...