mysql - 在服务器上转换时间戳在 PHP 和 MySQL 中给出不同的结果

标签 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秒。有人能解释一下为什么吗?

最佳答案

对于 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

关于mysql - 在服务器上转换时间戳在 PHP 和 MySQL 中给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10063046/

相关文章:

php - PDO beginTransaction 失败

ruby - 如何在新的一年到来时重新计算值,Ruby

r - 如何检查日期是否在一年中的指定时间内

linux - CentOS 6.6 更新到亚洲/德黑兰后时区没有改变

java - 如何从 currentTimeMillis() 获取可读时间

php - 需要根据登录的用户名计算列中的行数

php - 从两个同名表中选择数据

mysql - 常量表设计 MySQL 最佳实践

java - 用于检查事件发生的时间容器

parsing - time.Parse 行为