Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php “特定时区”;“立即开放”;功能_Php_Mysql_Timezone - Fatal编程技术网

Php “特定时区”;“立即开放”;功能

Php “特定时区”;“立即开放”;功能,php,mysql,timezone,Php,Mysql,Timezone,我需要一个'现在是开放的'php功能的网站上,我正在建设。看看前面的一个例子,我已经构建了我的mysql表: hours_id INT NOT NULL, loc_id INT NOT NULL, dow TINYINT NOT NULL, open_time TIME NOT NULL, close_time TIME NOT NULL, 然后使用: "SELECT

我需要一个'现在是开放的'php功能的网站上,我正在建设。看看前面的一个例子,我已经构建了我的mysql表:

hours_id      INT         NOT NULL,
loc_id        INT         NOT NULL,
dow           TINYINT     NOT NULL,
open_time     TIME        NOT NULL,
close_time    TIME        NOT NULL,
然后使用:

"SELECT open_time, close_time 
 FROM opening_hours 
 WHERE dow=dayofweek(curdate()) 
   AND loc_id=:loc_id"
然后我可以计算出它是否打开。我正在构建的产品是全局的,我需要“立即打开”与位置所在的时区相关,而不是服务器位置或查看器位置

我已经在相关数据库中存储了国家代码和位置的lat/lng,因此我的想法是从中获取时区,或者提供一种方法供用户选择,然后以某种方式修改我的SQL

我的方向对吗?你的方法是什么

  • 阅读并确保您的mysql数据库配置了当前时区表。定期更新

  • 将每个位置与命名的IANA/Olson时区关联,例如
    “美国/洛杉矶”
    ,或
    “欧洲/伦敦”
    。提到如果您有lat/lon,您可以通过查找时区

  • 使用MySQL函数将当前UTC时间转换为特定区域。例如,
    CONVERT\u TZ(UTC时间戳(),'UTC','Asia/Tokyo')

  • 使用转换时间的星期和时间对照位置条目中的日期和范围进行检查

  • 另外,请注意,其他人可能建议采取仅在数据库中存储UTC的方法,或者在与“现在”值进行比较之前将所有值转换为UTC。这两种方法中的任何一种都可能在边缘情况下失败,因为UTC工作日不一定与每个时区的工作日相同

    另一种可行但需要更多努力的方法是预先确定未来某段时间内的特定UTC启动和停止时间(至少到下一个时间,但可能更远)。然后您可以使用UTC时间扫描此列表。当您有数千个或更多的单个条目要检查时,这在规模上更有效。但在较小的规模,它通常不值得的开销


    类似地,您可以有一个后台进程,只在每条记录上设置一个“now open”标志,但它必须不断地对您的数据库工作,并且您不能在“now”之外的其他时间进行检查。

    您是否考虑过在打开时间和关闭时间之间的
    和now()
    @riggsfully是的,但这只能将小时数与服务器时间进行比较,我需要知道某个位置是否在其时区内打开,而不是服务器所在的时区(位置遍布世界各地)。我觉得在检查SQL之前,我需要获取位置的时区、存储它并调整服务器时间。只是不确定这是最好的方法。非常棒的答案,以及关于为什么不存储UTC的精彩解释(我正在考虑这一点)。我会花一点时间,考虑规模的选择-我没有启动,所以它可能不值得,但同时,我希望10万的位置,所以也许我应该把时间在现在。再次感谢,非常感谢。