gpt4 book ai didi

javascript - 如何将一系列小时调整为首选时区?

转载 作者:行者123 更新时间:2023-12-02 23:54:08 24 4
gpt4 key购买 nike

简单介绍一下背景,我有一个由 24 个数组组成的数组 —— 一个数组代表一天中的每个小时。

因此,午夜 0 索引将是 [133.00, 234.00],这将指示 12 - 1230 之间的 133 个操作以及 1230 - 凌晨 1 点之间的 234 个操作。

我需要调整这些索引数组,以在带有 JS 的浏览器中考虑用户的时区,这样,如果用户在纽约,则 0 索引(用户家乡的午夜)将显示在中国的偏移量中(明天中午 12 点) ,从用户的 Angular 来看)。

我一直在想一个解决方案,我有一个简单的函数来实现我能想到的

function offsetHourIndex(hourIndex, dataCenterTimeZone) {
let userTime = new Date().setHour(hourIndex)
return moment(userTime).tz(dataCenterTimeZone).hour();
}

这种方法的可靠性如何?

最佳答案

您的方法有一些问题:

  • 您假设本地时区的当前日期是目标时区的正确日期。大多数时候,世界各地都有两个活跃的约会对象。例如,伦敦为 2019-04-02 04:00,纽约为 2019-04-01 23:00。如果您只是从伦敦出发 4 小时,但将其应用到纽约的当前日期,您就创建了一个全新的时间点,早了一天。
  • 您假设每天正好有 24 小时。在夏令时转换或标准时间变化的时区中,转换当天的本地时间可能会增加或减少。
  • 在向后过渡的情况下,存在一段不明确的本地时间。例如,当美国太平洋时间在 11 月从 PDT 更改为 PST 时,会重复 1:00-1:59 的时间。如果这两个小时的数据都汇总到数组元素 1 中,那么您将获得该小时高于正常结果的结果。前向转换的情况正好相反 - 您将有一小时没有数据。
  • 服务器的时区设置可能是变化无常的。如果更换数据中心怎么办?如果迁移到云端怎么办?如果您运营多个数据中心怎么办?如果服务器管理员认为更改系统时区只会影响任务栏或前面板上的读数等,然后影响您的应用程序,该怎么办?一般来说,人们应该通过永远不要依赖服务器的本地时区设置来避免这些事情。

通过将所有内容都基于协调世界时 (UTC),尤其是数组,您可以避免所有这些问题。然后,您可以忽略任何服务器时区设置,而只需将所有内容都基于当前 UTC 日期,这在世界各地都是相同的。

这将为您提供索引中给定 UTC 时间的本地时间:

var localHour = moment.utc({hour: hourIndex}).local().hour();

对于上述建议,您不需要时刻时区。

但是,如果您确实觉得需要从特定时区转换为浏览器本地时间,那么您可以使用 moment-timezone ,如下所示:

var localHour = moment.tz({hour: hourIndex}, timeZoneName).local().hour();

请注意,当您这样做时,您还会遇到另一个问题 - 并非每个时区都会偏移整数小时。例如,印度使用 UTC+05:30。有很多是 :30 ,还有一些是 :45 。仅跟踪时间,您无法提供足够的信息来正确转换为正确的本地时间。您的结果可能会相差一位。

关于javascript - 如何将一系列小时调整为首选时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55483383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com