Typescript 中的日期时间时区转换问题

Datetime timezone conversion issue in Typescript

我在 angular 中从 matDatePIcker 中选择了一个日期并将其传递给云应用程序。但是 DateTime 在传递到 API 之前会根据时区进行转换。当云函数对收到的数据进行日期计算时,这会导致日期不匹配。

例如:我选择日期 "2022-01-07" 然后将其字符串化并将其传递给 API 以便它与本地时区一起转换(我的是 'Asia/Kolkata') 并且刚刚收到它作为 "2022-01-06T18:30:00.000Z"。我想用用户选择的确切日期转换它。目前,我试图将 local time zone 作为额外输入,然后需要将其转换为一个特定的时间日期。但给定的时区不能基于此直接转换。

任何人都可以提出解决这个问题的建议吗? 提前致谢。

您可以使用

将给定日期转换为时区的本地化字符串
new Date([your date].toLocaleString("en", { timeZone: [some timezone] }));

这里有个小帮手:

const dt = new Date(`2022/01/09`);
document.querySelector(`pre`).textContent = `now in\n \u2713 Kolkata: ${
  dateTime4TZ(`Asia/Kolkata`)}\n \u2713 Amsterdam: ${
    dateTime4TZ(`Europe/Amsterdam`)}\n \u2713 Tokyo: ${
    dateTime4TZ(`Asia/Tokyo`)}\n \u2713 Auckland: ${
    dateTime4TZ(`Pacific/Auckland`)}\n\n"2022/01/09" in\n \u2713 Kolkata: ${
    dateTime4TZ(`Asia/Kolkata`, dt)}\n \u2713 Amsterdam: ${
    dateTime4TZ(`Europe/Amsterdam`, dt)}\n \u2713 Tokyo: ${
    dateTime4TZ(`Asia/Tokyo`, dt)}\n \u2713 Auckland: ${
    dateTime4TZ(`Pacific/Auckland`, dt)}`;

function dateTime4TZ(timeZone, dt = new Date) {
  const pad = (nr, len=2) => `${nr}`.padStart(len, `0`);
  const localDT = new Date(dt.toLocaleString("en", { timeZone }));
  return `${localDT.getFullYear()}-${
    pad(localDT.getMonth() + 1)}-${
    pad(localDT.getDate())}T${
    pad(localDT.getHours())}:${
    pad(localDT.getMinutes())}:${
    pad(localDT.getSeconds())}.${
    pad(localDT.getMilliseconds(), 3)}Z`;
};
<pre></pre>