日期选择器获取给定时区的日期而不是本地时间

问题描述

在我的反应应用程序中,当我使用 moment-timezone 包(具有不同的时区)为日期选择器创建一个新的日期对象时,时间会自动转换为本地系统时间 + 所选时区时间。 有没有办法在客户端设置时区来创建新的日期对象? 我正在使用 Moment-timezone 进行全球化,使用 Meteor Js 进行后端

解决方法

如果我理解正确,您的问题是您想要提供一个日期选择器 UI,该 UI 会根据选定的日期和用户时区设置(从您的数据库中检索)自动生成一个日期对象,但您得到的是日期用户本地时间(因此可能已经有一些时区偏移)+ 用户时区偏移设置。

您主要有 3 种可能的解决方案:

  1. 让日期选择器 UI 始终提供 UTC 日期(通常为 UTC 午夜),然后添加用户的时区偏移设置。
  2. 让日期选择器 UI 将您用户的时区设置作为配置,以便在自动生成日期时使用该时区偏移配置。
  3. 让日期选择器 UI 在浏览器本地时间中提供一个日期,然后将其转换为 UTC,然后添加您用户的时区偏移设置。

UTC 中的选项 1 DatePicker: 我还没有看到任何提供此类选项的库,但听起来并不太奇怪,因此您可能会找到一个。或者您可能会摆弄组件代码......与选项 3 相比,这可能有点矫枉过正。

带有时区配置的选项 2 DatePicker: 根据您的评论,这听起来像您所期望的。不幸的是,我也没有看到任何提供这种功能的库。由于这听起来比选项 1 更具体,因此您不太可能找到这样的库。

选项 3 本地时间转换为 UTC 然后添加用户时区:这是实现在给定时区生成日期目标的标准做法,从本地时间的日期开始,由于所有 DatePicker UI 都只使用本地时间来简化事情。至于将当地时间转换为 UTC,您应该已经有很多关于 SO 的问题和答案了。

如果您必须为日期选择器 UI 提供初始值(通常是数据库中的先前值),请确保执行相反的操作,即减去用户的时区偏移设置以获取 UTC 日期,然后切换到浏览器区域设置时间。我见过一些应用程序忽略了这部分,并且当本地时间与 UTC 有负偏移时,日期不正确。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...