2012-03-22 74 views
2

我注意到一些奇怪的结果,MYSQL和PHP之间的日期转换。 请看下面PHP - Mysql日期转换

PHP:的strtotime(25-MAR-2012)返回1332626400
MySQL的:FROM_UNIXTIME(1332626400)返回2012-03-25 00:00:00
的结果是否如预期。

问题:

腓:的strtotime(26-MAR-2012)返回1332709200
MySQL的:FROM_UNIXTIME(1332709200)返回2012-03-25 23时00分○○秒

我期望FROM_UNIXTIME返回 “2012-03-26”,即(3月26日,而不是3月25日)

忽略时间如下并没有帮助:
FROM_UNIXTIME(1332709200, '%Y-%间%d' )返回2012-03-25

不知道这里发生了什么?

+7

这可能与夏令时有关 - 因为它在那一天发生变化...... – ManseUK 2012-03-22 10:18:08

+0

'strtotime()'是时区感知的。 http://www.php.net/manual/en/function.date-default-timezone-get.php返回什么? – 2012-03-22 10:22:03

+0

节约日光可能是问题所在。最好将日期/时间存储为UTC,然后根据其时区对特定个人进行隐藏。 – 2012-03-22 10:28:27

回答

0

我尝试以下 SELECT FROM_UNIXTIME(1332709200)随着时间的MySQL查询; 它返回'2012-03-26 02:30:00'。 所以它似乎与您的服务器上的夏令时或时区有关。

0

也许PHP和你的MySQL服务器的时区不同。结果中的差异恰恰是1小时,而您的数据源则以秒为单位。这不可能是一个巧合。看起来像UTC +1或UTC -1

0

检查你的PHP.ini中的date.timezone变量。在我的情况下(欧洲/布达佩斯),它抛出正确的值:

$ php -r "echo strtotime('26-Mar-2012');" 
1332712800