我最近在本地Windows计算机(使用IIS(上运行的一些PHP代码中出现了故障。
我移动了时区,出现这个问题是因为MySQL对NOW((等函数使用本地机器时间,但PHP从PHP.ini文件(或date_default_timezone_set等函数(确定时区。
我创建的记录有一个时间戳(来自PHP(,一旦它们超过15分钟就会被删除(在MySQL中使用NOW(((。由于时区不同,它们的年龄总是超过15分钟。
我移动了一点,可能并不总是记得将php.ini文件更新到当前时区。
PHP从其ini文件中的date.timezone设置中获取其当前时区。我想也许完全删除它会奏效,但它默认为UTC。
我意识到一种选择是,无论我使用PHP的时间还是MySQL的时间,都要保持一致,但我很想知道是否有一种方法可以告诉PHP使用它运行的机器的时区。
感谢
在Windows上,一种方法是用exec()
执行shell命令tzutil /g
并读取输出,在我的情况下,它报告Central Standard Time
。
由于这似乎不是date_default_timezone_set()
的可接受格式,至少根据支持时区列表,但您可以有一个短的Windows输出数组和相应的PHP可接受时区。