Разберите строку datetime и преобразуйте ее в UTC, используя js-joda / core и js-joda / timezone
Мы создали веб-сайт для нашего клиента, который запускает Angular 9+ во внешнем интерфейсе, а nodejs - это серверное приложение. Все работает хорошо.
Теперь мой клиент хочет изначально поддерживать клиентов из следующих часовых поясов: индийское время, тихоокеанское время, время Аризоны, горное время, центральное время и восточное время. Мы планируем использовать @js-joda/core и @js-joda/timezone для выполнения этой работы.
Одно из требований - подтвердить дату, введенную пользователем. Дата должна принадлежать только текущему месяцу. На сервере установлен часовой пояс UTC. Мы думаем о преобразовании даты и времени в UTC, а затем сохранении в базе данных (mongodb). Но мы не уверены, как мы можем преобразовать данную дату в UTC с помощью js-Joda. Мы пробовали использовать следующий код, но, похоже, он не конвертируется.
var jsJoda = require("@js-joda/core");
require("@js-joda/timezone");
var indiaZone = jsJoda.ZoneId.of("Asia/Calcutta");
var localDateTime = jsJoda.LocalDateTime.parse("2021-10-05T23:18:09.905");**//<--user entry date**
var localTime = jsJoda.ZonedDateTime.of(localDateTime, indiaZone);
var utcZoned = jsJoda.ZonedDateTime.of(localTime, jsJoda.ZoneOffset.UTC);
console.log('Current Time in UTC: ' + utcZoned.toString());
Я ожидал, что напечатанная дата будет на 5,5 часов позже, но этого не произошло. Не могли бы вы помочь, если я в правильном направлении, а также почему время UTC показывает то же время, что и прошло?
Спасибо, Хемант.
2 ответа
Вы можете использовать ZonedDateTime#withZoneSameInstant
для удовлетворения требований.
Демо:
import {
LocalDateTime,
ZoneId,
ZonedDateTime
} from "@js-joda/core";
import "@js-joda/timezone"; // Automatically adds timezone support
const zoneIdIndia = ZoneId.of("Asia/Kolkata");
const zoneIdUtc = ZoneId.of("Etc/UTC");
const ldt = LocalDateTime.parse("2021-10-05T23:18:09.905");
const zdtIndia = ldt.atZone(zoneIdIndia);
const zdtUtc = zdtIndia.withZoneSameInstant(zoneIdUtc);
console.log(zdtIndia.toString());
console.log(zdtUtc.toString());
Выход:
2021-10-05T23:18:09.905+05:30[Asia/Kolkata]
2021-10-05T17:48:09.905Z[Etc/UTC]
Моя проблема заключалась в том, что у меня была строка по восточному стандартному времени, которую мне нужно было преобразовать в UTC с помощью jsJoda.
Решение:
- дата: 21.05.2021
- час: 22
- минута: 00
const jsJoda = require("@js-joda/core");
require('@js-joda/timezone');
let startTime = jsJoda.LocalDateTime.parse(`${date}T${hour}:${minute}`)
.atZone(jsJoda.ZoneId.of("America/New_York"))
.withZoneSameInstant(jshourJoda.ZoneId.of("UTC-00:00"));
- _Дата:
LocalDate { _year: 2021, _month: 5, _day: 22 }
, - _время:
LocalTime { _hour: 2, _minute: 0, _second: 0, _nano: 0 }