基本上我有一个网站,可以让商店存储他们的开/关时间。
现在,我正在尝试添加一项功能,使访客可以查看商店是否关门。
我了解我可以执行以下查询:
SELECT * FROM `store_hours` WHERE TIME(NOW()) BETWEEN `opens` AND `closes`
...,查询工作并检索当前打开的商店。但是,起初,此查询没有考虑商店的时区。
所以..我决定存储商店的开/关时间,并附加到UTC的转换:
id | store_id |打开关闭utc_opens | utc_closes
现在我可以这样查询:
SELECT * FROM `store_hours` WHERE TIME(NOW()) BETWEEN `utc_opens` AND `utc_closes`
因此,现在我可以轻松地获得有关开设了多少家商店的全局列表,而无论它们在哪里都无所谓。
现在我来解决这个问题。通过PHP,我所做的就是将偏移量添加到时间戳中:
date('H:i', strtotime($values['closes']) + $offset)
然后我开始考虑太平洋标准时间,然后是夏令时。
我想添加此打开/关闭功能,它将成为系统的重要组成部分。只是如果我一个小时假,我将失去很多收入。
我以前从未处理过(我也不希望这样做,因为这是一个令人烦恼的复杂问题)。也就是说,有一些方法可以解决此问题:
您如何处理时区问题?
看来,如果您希望系统不能完美运行,但很好,那么您将不得不陷入以下困境:
http://en.wikipedia.org/wiki/Zoneinfo
简而言之,问题是粒度复杂性之一。无论您多么努力,都不能编写简单的脚本来确定仅在静态GMT偏移量的情况下商店的确切时间。为了克服这个问题,人们已经整理了公共数据库,这些数据库几乎(几乎)解决了时区中固有的所有小问题。即使您知道某个用户位于美国西部(洛矶山脉以西),也不知道该用户位于Barstow还是Phoenix(亚利桑那州未进行DST,所以半年时间与LA相同,另一半与丹佛相同)。
回到数据输入...您只需要为每个商店输入准确的时区代码,并查询该zoneinfo数据库以确定当前偏移量应为多少。
尝试这个:
确定用户时区