javascript - 如何将日期从一个时区转换为另一个时区
问题描述
我有一个日期,它是用户浏览器时区中给定日期的开始,但我需要使用 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.
解决方案
要获得对 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
因此,您应该避免使用对象构造函数解析字符串。
推荐阅读
- python - Python集成大数组系数
- css - 在具有负边距的 div 下方发出移动图像
- java - 仅在字符彼此相邻时计算字符
- reactjs - ReactJS 外部库
- python - 删除字典中的类似条目
- datetime - Luis 内置日期时间实体不适用于德国文化
- ios - UIBarButtonItem 动画时 UITableView 中的故障
- android - 在 Kotlin 中使用 View 模型观察 Room 中的数据
- ef-core-2.0 - Entity Framework Core 2.x 更新数据库集不起作用
- android - 我应该为 ToDo 应用程序中的每个特定列表创建不同的表吗?