gpt4 book ai didi

javascript - 在 Javascript 中使用不同时区

转载 作者:行者123 更新时间:2023-12-02 12:42:25 25 4
gpt4 key购买 nike

我正在开发一个基于云的应用程序,该应用程序为世界各地的用户广泛处理日期和时间值。

考虑一个 JavaScript 场景,我的计算机位于印度 (GMT+05:30),并且我必须显示在加利福尼亚时区 (GMT-08:00) 运行的时钟。

在这种情况下,我必须获取一个新的日期对象,

让 india_date = new Date()

添加时区偏移值,

让 uts_ms = india_date.getTime() + india_date.getTimezoneOffset()

添加加利福尼亚州的时区偏移值,

让 california_ms = utc_ms + getCaliforniaTimezoneOffsetMS()

最后是日期对象。

让 california_date: Date = new Date(california_ms)

有没有办法直接处理这些类型的时区,而不必一次又一次地转换值?

最佳答案

首先,我们来谈谈您问题中的代码。

let india_date = new Date()

您已将此变量命名为 india_date,但如果代码在设置为印度时区的计算机上运行,​​则 Date 对象将仅反射(reflect)印度。如果它在具有不同时区的计算机上运行,​​它将反射(reflect)该时区。请记住,在内部,Date 对象仅跟踪基于 UTC 的时间戳。当调用需要本地时间的函数和属性时,而不是在创建 Date 对象时,将应用本地时区。

add it's timezone offset value

let uts_ms = india_date.getTime() + india_date.getTimezoneOffset()

这种做法是不正确的。 getTime() 已返回基于 UTC 的时间戳。您不需要添加本地偏移量。 (此外,缩写是 UTC,而不是 UTS。)

Now add california's timezone offset value

let california_ms = utc_ms + getCaliforniaTimezoneOffsetMS()

同样,添加偏移量是不正确的。此外,与印度不同的是,加利福尼亚州实行夏令时,因此一年中的部分时间偏移量将为 480 (UTC-8),而一年中的部分时间偏移量将为 420 > (UTC-7)。任何函数(例如 getCaliforniatimezoneOffsetMS)都需要将时间戳作为参数传入才能生效。

and finally the date object

let california_date: Date = new Date(california_ms)

当向 Date 构造函数传递数字时间戳时,它必须采用 UTC。传递这个 california_ms 时间戳实际上只是选择一个不同的时间点。您无法仅通过添加或减去偏移量来更改 Date 对象的行为以使其使用不同的时区。对于任何需要本地时间的函数,例如 .toString() 等,它仍将使用其运行位置的本地时区。

只有一种情况下这种调整才有意义,即一种称为“纪元转换”的技术。调整时间戳以将基准纪元从正常的 1970-01-01T00:00:00Z 移开,从而允许利用 Date 对象的 UTC 函数(例如 getUTCHours 等)。问题是:一旦转移,您就无法在该 Date 对象上使用任何本地时间函数,也无法将其传递给任何需要该 Date 对象的其他对象。做一个正常人。正确完成时代转变是为像 Moment.js 这样的图书馆提供动力的。 。 Here是正确完成纪元转换的另一个例子。

但是在您的示例中,您正在移位(两次错误),然后使用 Date 对象,就好像它是正常且未移位一样。这只会导致错误,从 toString 输出中显示的时区可以明显看出,并且在数学上,在本地时区和预期目标时区的任何 DST 转换附近都会出现错误。一般来说,您不想采用这种方法。

相反,请阅读我在 How to initialize a JavaScript Date to a particular time zone. 上的回答您的选项列在那里。谢谢。

关于javascript - 在 Javascript 中使用不同时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53707902/

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