16

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

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

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

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

发回的时间戳是 GMT 等值的 MINUS 1 小时。即我回来:2010 年 7 月 20 日 23:00:00 GMT 而不是 2010 年 7 月 21 日 00:00:00 GMT。

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

这可能与夏令时有关吗?如何在不给所有日期增加 1 小时的情况下解决问题?

4

3 回答 3

29

夏令时期间,欧洲/伦敦时间不是 GMT 时间。您需要将其设置为 UTC。

date_default_timezone_set('UTC');

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

于 2010-07-21T21:26:22.260 回答
1

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

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

于 2010-07-21T22:29:14.200 回答
-9

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

于 2010-07-21T21:26:52.010 回答