PHP strtotime()函数错误1小时?

时间:2010-07-21 21:21:52

标签: php mysql strtotime unix-timestamp

在将日期和时间插入MySQL数据库之前,我使用PHP将日期和时间转换为时间戳。

我的问题是,当我使用PHP的strtotime函数时,输出时间戳比实际时间晚了-1小时。

例如,考虑今天的日期:07/21/2010。当我使用PHP代码时:

<?php
$my_timestamp = strtotime("07/21/2010");
echo $my_timestamp;
?>

发回的时间戳是格林威治标准时间等于1小时。即我回来了:2010年7月20日23:00:00 GMT而不是2010年7月21日00:00:00 GMT。

我住在英国所以我的时区是GMT。我已经使用date_default_timezone_set('Europe / London')在脚本中声明了我的时区,并且我还确保将php.ini文件设置为'Europe / London'。

这或许与夏令时有关吗?如何在不添加1小时的情况下解决问题?

3 个答案:

答案 0 :(得分:26)

欧洲/伦敦时间不是夏令时的格林尼治标准时间。您需要将其设置为UTC。

date_default_timezone_set('UTC');

<子> date_default_timezone_set('GMT');可能有效,但正如Kenneth在下面的评论中指出的那样,它已被弃用。

答案 1 :(得分:1)

伦敦时区以夏季英国夏季时间表示。话虽如此,将时间存储在UTC中并以UTC或本地时间向最终用户显示时间是一种很好的做法。

确保您的系统时间为UTC也是明智的。

答案 2 :(得分:-9)

在PHP 5.3之前,strtotime在计算时间时遇到问题,如果您添加或扣除了月份和天数等等。这已得到修复,因此您现在可以具体说明您希望如何计算,如果您低于PHP 5.3我会建议在mysql中进行日期计算或升级PHP版本。