繁体   English   中英

如何使用 date-fns 更正时区?

[英]How to correct the time-zone with date-fns?

(在线查看此示例: 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

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

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

初始 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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM