问题描述
(在线查看此示例: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,So. 13: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。