在服务器上转换时间戳会在PHP和MySQL中产生不同的结果

时间:2012-04-08 13:08:59

标签: mysql date time timezone timestamp

考虑一下。在我的服务器上,我转换了一个(UTC / GMT)时间字符串,如下所示:

strtotime('Fri Feb 18 21:08:38 +0000 2011')

我的服务器返回

1298063318

这是正确的,因为我测试的所有unix timestamp converters都返回相同的内容。反之亦然,如果我不插入日期而是插入时间戳,我会返回上面给出的时间字符串。 如果我在服务器上转换时间戳:

date("Y-m-d H:i:s", 1298063318); 

我的回复日期与预期不同(即'Fri Feb 18 21:08:38 +0000 2011'):

2011-02-18 22:08:38

所以现在已经过了一个小时。这可能是因为我的服务器时区设置在欧洲/巴黎,因此它将时间戳转换为UTC / GTM + 1.但MySQL在同一服务器上运行并具有相同的时区,这给了我另一个结果:

SELECT FROM_UNIXTIME(1298063318) = 2011-02-18 22:08:15

换句话说,它是18秒。有人能解释一下原因吗?

1 个答案:

答案 0 :(得分:4)

对于MySQL,leap second更正用于日期函数(MySQL Documentation)。对于PHP日期函数,不考虑闰秒。因此,您现在可以获得24秒的差异。

您可以尝试以下方法来解决您的问题:http://pumka.net/2010/10/24/why-mysql-timestamp-is-24-seconds-different-from-php/

PS。 38 - 15 = 23