首先,我想将日期转换为PHP的整数。
echo strtotime('08-04-2016 10:33:45 GMT+7');
结果为:1460086425。但当我再次使用代码检查时:
$timezone = +7;
echo gmdate("H:i:s | d-m-Y ",1460086425 + 3600*($timezone+date("I")));
这就是结果:11:33:45 | 08-04-2016
为什么与11:33:45 | 08-04-2016
和08-04-2016 10:33:45
不同,超过一个小时。
我想知道您的时区设置是否不正确。我最近也遇到了类似的问题,这是由于夏令时应用不正确造成的。我想,如果服务器不知道它在哪里,那么它就无法知道DST何时开始和结束。
要想知道这是否适用于你,请在脚本中尝试echo ini_get('date.timezone');
——你会得到什么?如果问题在web脚本中,请确保在web上下文中执行此操作;如果问题在控制台上,请在控制台上执行此操作。这是因为控制这一点的PHP设置通常是单独设置的。
如果您发现您的设置没有提供通常为TZ指定的正确城市,请在php.ini
文件中进行更改。例如,对我来说,我使用这个:
date.timezone = Europe/London
据我所知(在检查时区时),GMT+7的地区没有遵守夏令时。此外,date
使用date.timezone
中设置的时区,该时区可能对您的位置正确,但对任何其他位置可能都不正确。
最好使用DateTime并指定正确的DateTimeZone。这样一来,时区偏移(以及夏令时是否有效)出错的几率大大降低。