ech*_*cho 29 php mysql datetime date
我一直在我的应用程序中使用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 |
+------------+
Run Code Online (Sandbox Code Playgroud)
但是,偶然地,我碰巧注意到当我1983-01-01作为日期输入时,结果不再相等:
$ php
<?php echo strtotime("1983-01-01"); ?>
410263200
mysql> SELECT UNIX_TIMESTAMP("1983-01-01") ts;
+-----------+
| ts |
+-----------+
| 410256000 |
+-----------+
Run Code Online (Sandbox Code Playgroud)
如您所见,PHP返回410263200,而MySQL返回410256000 - 相差7200秒.
这让我很好奇,我想知道时间戳不再等同于什么日期,所以我写了一个以今天的日期(Ymd格式)开头的小程序,使用PHP strtotime和MySQL UNIX_TIMESTAMP并比较结果.然后它从每个值中减去1天并循环直到它们不再相等.
结果:
1983年10月29日
1983年10月29日,出于某种原因,strtotime并UNIX_TIMESTAMP返回值,通过7200秒不同.
有任何想法吗?
谢谢阅读.
Mat*_*son 22
你说你在阿拉斯加时间.来自http://www.statoids.com/tus.html:
1983-10-30 02:00:除阿留申群岛和圣劳伦斯岛外,阿拉斯加的所有地区都改为AT.在改变之前,阿拉斯加东部138°W(朱诺)曾在PT; 在育空时间138°W和141°W之间(Yakutat),这是UTC-9与DST; 西经162°W(诺姆)曾经在白令时间,这是UTC-11与DST.阿拉斯加 - 夏威夷地区的名称改为夏威夷 - 阿留申群岛.
所以,我猜这是因为你的时区在1983年10月30日改变了两个小时(7200秒= 2小时).
我猜MySQL的UNIX_TIMESTAMP正在使用与PHP中的Alaskan设置不同的时区,这可能是服务器默认设置,或者取决于您的连接设置,因此当您点击该日期时,这些时区会有所不同.
您可以通过询问MySQL在该连接上的时区设置来收集更多信息SELECT @@global.time_zone, @@session.time_zone;; 有关输出以及如何解释输出的更多信息,请参阅此答案.
| 归档时间: |
|
| 查看次数: |
606 次 |
| 最近记录: |