首页 > 解决方案 > 如何将日期从一个时区转换为另一个时区

问题描述

我有一个日期,它是用户浏览器时区中给定日期的开始,但我需要使用 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.

标签: javascriptdatetimezonedate-fns

解决方案


要获得对 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因此,您应该避免使用对象构造函数解析字符串。


推荐阅读