【问题标题】:How to correct the time-zone with date-fns?如何使用 date-fns 更正时区?
【发布时间】:2020-12-18 17:40:31
【问题描述】:

(在线查看此示例:https://stackblitz.com/edit/date-fns-playground-zeitzonen?file=index.ts -> 控制台输出)

以下情况,现在是上午 11:54:

// Setup
const dateString = "2020-08-30T11:54:48.200Z";    // <---- 11:54 AM
const tz = "Europe/Berlin";
const dateFormat = "d. MMM yyyy, E HH:mm";
const dateOptions = { locale: de }; 

就我格式化日期而言,它会更改时区并增加 2 个小时:

const parsedDate = parseISO(dateString);

const formattedDate = format(parsedDate, dateFormat, dateOptions);
// outputs: 30. Aug 2020, So. 13:54

const zonedDate = utcToZonedTime(dateString, tz);
// outputs: 2020-08-30T11:54:48.200Z

const formattedZonedDate =  format(zonedDate, dateFormat, dateOptions);
// outputs: 30. Aug 2020, So. 13:54

所需的(正确的)输出是30. Aug 2020, So. 11:54

我的错误在哪里?初始dateString 的时区是否正确?

【问题讨论】:

    标签: typescript timezone locale utc date-fns


    【解决方案1】:

    初始 dateString 的时区是否正确?

    如果您希望它在柏林时间,则不会,不。末尾的“Z”表示“UTC” - 所以你的字符串代表 11:54 UTC,在柏林确实是 13:54。在我看来,格式是正确的。

    诚然,我并不完全清楚为什么 utcToZonedDateTime 仍然报告 UTC 值而不是分区版本。

    如果你想让dateString 代表当地时间,它可能应该是“2020-08-30T11:54:48.200”。另一方面,如果您希望它表示 在柏林 11:54 的 UTC 时间,则它应该是“2020-08-30T09:54:48.200Z” - 请注意更改到 09 点钟。

    【讨论】:

      猜你喜欢
      • 2019-06-30
      • 2021-09-27
      • 2021-04-01
      • 2021-05-07
      • 2019-02-03
      • 1970-01-01
      • 2021-08-21
      • 2022-11-15
      • 2021-08-01
      相关资源
      最近更新 更多