【发布时间】:2015-04-09 01:38:38
【问题描述】:
我有一个表,用户可以在其中存储和事件。事件的开始时间存储在一个列中,列字段为time。在夏令时期间,我所在的时间偏移量是-5,因此如果用户存储一个从12:00pm 开始的事件,它将作为17:00:00 存储在数据库中。如果用户要创建一个具有完全相同的开始时间而不是夏令时的事件,则时区偏移量将为-4,并将作为16:00:00 存储在数据库中。
如果用户选择从下午 12:00 开始的所有事件并且是夏令时,我将使用 javascript(在本例中为 -5)获取用户时区偏移量,并相应地创建查询 WHERE startTime > 17:00:00。问题是在不是夏令时时创建的所有事件的开始时间都是16:00:00,因为偏移量是-4 而不是-5,所以它们不会被选中。
有解决这个问题的办法吗?我存储事件开始时间的方法是否完全错误?
【问题讨论】:
-
你在哪里进行 UTC 转换?
-
在添加事件之前的 php 中。
-
有什么特殊原因你不只使用
utc_timestamp()作为插入值吗? -
问题是它们的UTC时间不同,但本地时间相同。因此,使用本地时间存储它们,或者在创建它们时为适用的偏移量设置第二列,以便您可以调整到本地时间,类似于“其中 UTC+offset = 17:00”但当然是在有效的 SQL 中。
-
我认为最快的解决方法是过度查询额外的时间并使用 UTC 补偿日期过滤客户端(js 可以根据日历调整 DST)。假设您在响应中的完整项目中有真实日期。就像两次犯同样的错误以抵消两者一样。
标签: javascript php mysql sql