解析日期时间字符串,并使用js-joda/core和js-joda/timezone将其转换为UTC



我们必须为我们的客户端构建一个网站,该网站在前端运行Angular 9+,nodejs是服务器后端应用程序。一切都很好。

现在,我的客户希望最初支持以下时区的客户:印度时间、太平洋时间、亚利桑那时间、山地时间、中部时间和东部时间。我们计划使用@js-joda/core和@js-juda/timezone来完成这项工作。

其中一项要求是验证用户输入的日期。日期必须仅属于当前月份。服务器设置了UTC时区。我们正在考虑将日期时间转换为UTC,然后将其存储在(mongodb(数据库中。但我们不确定如何使用js-Joda将给定日期转换为UTC。我们尝试使用以下代码,但它似乎无法转换。

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时间显示的是过去的同一时间?

您可以使用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]

我的问题是我在东部标准时间有一个字符串,需要使用jsJoda将其转换为UTC。

解决方案:

  • 日期:2021-05-21
  • 小时: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"));
日期:CCD_ 2
  • _时间:LocalTime { _hour: 2, _minute: 0, _second: 0, _nano: 0 }
  • 最新更新