【问题标题】:How to handle Timezone offset with daylight savings?如何使用夏令时处理时区偏移?
【发布时间】:2015-02-04 08:26:36
【问题描述】:

在我的网站中,用户 A 创建了一个从上午 9:00 开始的活动。我将该时间转换为格林威治标准时间,以便如果用户 B 在不同时区提前两个小时看到该事件,它可以转换为用户 B 的时区并显示该事件从上午 11:00 开始。

我的问题是,如果用户 A 在夏令时期间创建一个事件,然后在夏令时结束时查看它,则时区偏移将关闭一小时。这将导致事件在上午 8:00 开始时不是夏时制,而在上午 9:00 时开始是夏时制。有关如何使用 javascript 或 php 解决此问题的任何建议?

我唯一的想法是,当我得到如下所示的时区偏移量时,我是否应该始终将日期设置为 1 月,这样无论实际月份如何,我总是得到相同的时区偏移量?或者有没有更好的方法来解决这个问题?

d = new Date();
d.setMonth(1);
d.getTimezoneOffset()

【问题讨论】:

  • 我不确定你在问什么?您应该始终在相关时间添加时区偏移量。如果您这样做,将不会出现任何偏离 1 小时的错误。
  • @MarkReed 您的意思是在创建事件时存储与事件的时区偏移量并在将其转换为不同时区时使用该值?
  • 您要解决的问题是什么?如果我在美国东部时间 5 月上午 9 点创建了一个事件,该事件将存储为 1300 UTC。如果我查看当前 12 月的 5 月事件,它仍会显示为上午 9 点,因为 5 月的时区偏移量是 4 小时,即使当前 12 月的时间是 5 小时。
  • 现在,如果您尝试安排 重复 活动,以便每周举行一次 5 月的会议或到 12 月的任何时间,那么是的,您有存储本地时间和时间偏移量,而不仅仅是存储 UTC。
  • @MarkReed 是的,我试图做重复性事件,你的解决方案解决了它,所以谢谢。使用new Date().getTimezoneOffset() 时,我现在使用new Date(eventDate).getTimezoneOffset() 以使偏移量始终相同。谢谢!

标签: javascript php date


【解决方案1】:

getTimezoneOffset 返回的时区偏移代表方法被调用的日期,而不是当前时间。因此,只需始终询问您正在显示的事件的时区,就可以了。

但是,请注意,如果您正在安排重复事件,则需要将时间存储和处理为当地时间而不是通用时间。否则,每当夏令时开始或结束时,会议时间都会增加一个小时。

【讨论】:

    猜你喜欢
    • 2016-04-09
    • 2020-01-19
    • 2015-06-08
    • 2014-05-06
    • 1970-01-01
    • 2021-08-28
    • 2012-11-21
    • 2013-10-17
    • 2013-06-08
    相关资源
    最近更新 更多