gpt4 book ai didi

javascript - 使用 moment.js 防止 DST 偏移以处理重复发生的事件

转载 作者:数据小太阳 更新时间:2023-10-29 06:15:21 30 4
gpt4 key购买 nike

我正在构建的系统有一个事件组件,其中一部分是创建重复事件的能力。在我的数据库中,我以 UTC 格式存储所有事件。当一个重复事件显示在用户的日历上时,它应该总是显示在“墙上时间”中。因此,例如,如果我在每周三下午 1:00 创建一个重复事件,无论夏令时如何变化,它都应该始终在下午 1:00。

我遇到的问题是,每当我尝试使用 Moment.js 设置此日期的格式时,Moment 始终会考虑 DST 转换并相应地更新事件。以我之前的示例为例,在 2016 年,DST 类次发生在 3 月 13 日,因此如果我的约会是在 2016 年 2 月预订的,那么 3 月 13 日之前的每个约会都会正确输出为 1:00PM。 3 月 13 日之后,应用夏令时转变,我的所有事件现在都提前一个小时。

有推荐的方法来处理这个问题吗?我似乎找不到让 Moment“忽略”DST 的方法,也没有在搜索时找到合适的解决方案。

不确定这有多重要,但我在输出日期时使用 Moment Timezone 转换为用户的本地时区。

谢谢!

最佳答案

作为最佳实践, future 日期应以本地时间存储。这是因为,正如评论中指出的那样,时区规则可以而且确实会发生变化。因此,您无法提前正确计算本地时间的正确 UTC 日期。

当您存储 future 日期时,您应该将其与用户期望事件时间所在的 IANA 时区一起存储。然后您实际上会执行与您现在正在进行的转换相反的操作。如果您需要知道事件在全局时间轴上的确切时间点,您可以从本地时间转换为 UTC。

请注意,IANA 时区数据库经常更新。它现在是2016d版本,这意味着它今年已经更新了四次。如果您的应用程序将在多个国家/地区使用,您将需要非常勤奋地不断更新时刻时区以跟上变化。

至于为什么您看到您的 UTC 日期现在没有正确更改 - 我认为您正在使用您的预定日期,转换为 UTC,然后计算您的重现时间。当您在 UTC 中进行日期数学计算时,它不会正确说明 DST 偏移,因为它不知道它们。因此,当时刻将该日期转换回本地时,它将关闭一个小时。如果您要在本地时间进行日期数学运算,然后转换为 UTC 进行存储,那么只要时区规则未更改,您的转换回来就是正确的。不过不要这样做 - 以本地时间存储日期。

关于javascript - 使用 moment.js 防止 DST 偏移以处理重复发生的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37283885/

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