【发布时间】:2011-09-07 03:04:21
【问题描述】:
我一直在我的应用程序中使用 PHP 的 strtotime 和 MySQL 的 UNIX_TIMESTAMP 函数,将日期转换为时间戳。 PHP 和 MySQL 在我的本地机器上运行,这些函数通常返回相同的结果,正如我所期望的那样:
$ php
<?php echo strtotime("2011-06-02"); ?>
1307001600
mysql> SELECT UNIX_TIMESTAMP("2011-06-02") ts;
+------------+
| ts |
+------------+
| 1307001600 |
+------------+
但是,我碰巧注意到,当我输入1983-01-01 作为日期时,结果不再相等:
$ php
<?php echo strtotime("1983-01-01"); ?>
410263200
mysql> SELECT UNIX_TIMESTAMP("1983-01-01") ts;
+-----------+
| ts |
+-----------+
| 410256000 |
+-----------+
如您所见,PHP 返回 410263200,而 MySQL 返回 410256000 - 相差 7200 秒。
这让我很好奇,我想知道时间戳在哪一天不再等价,所以我写了一个小程序,从今天的日期开始(以 Ymd 格式),使用 PHP 的 strtotime 和 MySQL 的 UNIX_TIMESTAMP并比较结果。然后它从每个值中减去 1 天并循环,直到它们不再相等。
结果:
1983-10-29
1983 年 10 月 29 日,出于某种原因,strtotime 和 UNIX_TIMESTAMP 返回的值相差 7200 秒。
有什么想法吗?
感谢阅读。
【问题讨论】:
-
你在哪个时区? (
date_default_timezone_get())?想知道这是否是特定于时区的一些奇怪的日历变化——大概发生在 1983 年 10 月 30 日。 -
两个小时,世界停止了,所以我们都可以在新发布的“亚当”上玩我们的 ColecoVision 游戏