Разберите строку 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 }
Другие вопросы по тегам