首页 > 解决方案 > date-fns-timezone 给出错误的结果?

问题描述

现在是太平洋标准时间 2020 年 8 月 30 日星期日下午 5:20。

如果我运行这个:

import {formatToTimeZone } from 'date-fns-timezone';
const dateNow = new Date();
const timeFormattedForUserTimezone = formatToTimeZone(dateNow, 'h:mm A z, MMM do, YYYY', {timeZone:'Europe/Berlin'})

...我得到这个timeFormattedForUserTimezone

2020 年 8 月 1 日,欧洲中部时间凌晨 2:20

谷歌不同意,告诉我柏林的时间是:

2020 年 8 月 31 日凌晨 2:23

...即 8 月 31 日而不是 8 月 1 日。

我错过了什么?

标签: javascriptnode.jsdatedatetimedate-fns

解决方案


您的时间字符串是'h:mm A z, MMM do, YYYY'which 使用dowhich is Day of week

改为使用(注意代表的'h:mm A z, MMM Do, YYYY'大写字母)。DDoDay of month

此处的文档:https ://github.com/prantlf/date-fns-timezone/blob/master/docs/API.md#formattotimezone

所以你的代码变成:

import {formatToTimeZone } from 'date-fns-timezone';
const dateNow = new Date();
const timeFormattedForUserTimezone = formatToTimeZone(dateNow, 'h:mm A z, MMM Do, YYYY', {timeZone:'Europe/Berlin'})

推荐阅读