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

Date Picker get Date in given timezone instead of local time

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

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

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

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

Option 1 DatePicker in UTC: 我还没有看到任何库提供这样的选项,但听起来并不太奇怪,所以你可能会找到一个提供这种选项的库。或者您可以 fiddle 使用组件代码...与选项 3 相比,这可能有点矫枉过正。

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

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

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