所以基本上我将一堆日历事件存储在mysql表中。我会存储它们应该发生的一周中的日期以及时间。现在,时间存储为GMT计算的午夜秒数。但是,当我让人们登录并检查日历时,他们来自GMT以外的其他时区,我在计算当前时区内的哪些事件时遇到问题。有什么建议吗?
答案 0 :(得分:2)
当您处理时区时,不想要自己进行偏移计算,尤其是当您处理小于1天的时间单位时。一个简单的原因:夏令时。
MySQL和PHP都有许多用于操作日期的日期/时间函数。他们知道日光节约和其他移动日期和时间的怪癖。如果您尝试手动滚动解决方案,他们会比您更频繁地更正确。至少,使用(或创建)包含时区的日期对象。不幸的是,PHP函数可能有点棘手并且没有很好的文档记录,但所有功能都存在。您仍然可以使用unix时间戳作为“规范”格式,但与其一起使用的所有代码都必须知道或了解它所处的时区。
在过去的工作中,我不得不处理学校的时间表,并将这种格式(期限,周,日,期间......)转换为实际日期。我们构建了一个对象,可以根据需要进行任何必要的转换并缓存结果。这是一项努力,但使用PHP日期函数进行所有转换和调整可以节省许多时区和日光节省的问题。
使用日历的另一个警告:您可能必须区分事件的时区和用户的时区。当事件的时区保持固定并且与用户一起移动时。无法处理所有这些细微差别的原因是Exchange / Outlook中的日历仍然存在夏令时更改问题。 : - )
答案 1 :(得分:1)
这是many functions,可以帮助你。
答案 2 :(得分:0)
您可以在进行比较之前将时区中的当前日期转换为GMT(不一定在MySQL中,但您可以使用CONVERT_TZ进行比较)。
至于找到他们的时区,防弹方法可能是要求用户并保存他的选择。
答案 3 :(得分:0)
我将存储事件的unix时间戳,并使用PHP中的时间函数来计算正确的显示。这使得数据库数据独立于您实际所在的时区。用户仍然需要提供他所在的时区。
答案 4 :(得分:0)
使用数据库'datetime数据类型并使用数据库的日期/时间函数。 PHP函数相当有限,如果您处理实际日期,则不只需将时间视为整数。 一个好的策略是以UTC格式存储所有日期时间,然后您可以为该位置添加一个额外的字段(例如,本地时区偏移量),如果这是相关的。但通常情况下,查看者时区是相关的,而不是提供数据的时区(困惑了?)