如何将日期从一个时区转换为另一个时区

问题描述 投票:0回答:2

我有一个日期,它是用户浏览器时区中给定日期的开始,但我需要使用 date-fns 将其转换为另一个时区的日期开始。

我有个约会:

const date = new Date("2020-10-13"); // Tue Oct 13 2020 00:00:00 GMT-0400 (Eastern Daylight Time)

我需要将其转换为

"America/Chicago"
时区的一天开始时间。

const timeZone = "America/Chicago";
// Need to convert a date object
// Tue Oct 13 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
// to
// Tue Oct 13 2020 00:00:00 GMT-0500 (Central Daylight Time)
// and all I'm given is the timeZone value.
javascript date timezone date-fns
2个回答
3
投票

要获得 date-fns 的时区支持,您将需要 date-fns-tz 附加模块。

然后您可以执行以下操作:

import { zonedTimeToUtc } from 'date-fns-tz';

const dt = zonedTimeToUtc('2020-10-13', 'America/Chicago');

结果将是一个

Date
对象,代表给定时区的午夜。

请记住,

Date
对象本身始终基于UTC。 因此,您无法获得“位于”不同时区的
Date
对象。

此外,您应该将一个字符串传递到

zonedTimeToUtc
函数中,如图所示。 您不应该将其传递给Date
对象。  正如评论中提到的,ECMAScript 规范规定仅日期字符串值应该被解析为 UTC。  然而,仍然有一些实现没有正确遵循规范。  因此,您应该避免使用 
Date 对象构造函数来解析字符串。

任何在 2024 年寻找解决方案的人,似乎

0
投票

date-fns-tz

中不再可用。您可以使用 
formatInTimeZone()
 代替:
import { formatInTimeZone } from 'date-fns-tz'

const date = new Date('2024-05-06T10:46:20Z')

formatInTimeZone(date, 'Africa/Casablanca', 'yyyy-MM-dd HH:mm:ss') 
//output: 2024-05-06 11:46:20


© www.soinside.com 2019 - 2024. All rights reserved.