PHP 和 MySQL 为相同的时间戳返回不同的日期

标签 php mysql date time format

我遇到了一个有点令人沮丧的问题,我觉得有一个简单的解决方案。当我将相同的 UNIX 时间戳传递给 PHP date 和 MySQL FROM_UNIXTIME 方法时,它们返回两个截然不同的日期。我想从 MySQL 返回一个与 PHP 返回的值相匹配的值。

这是我目前使用的代码及其输出。提供的时间戳表示日期 2013 年 1 月 1 日星期二 (01/01/2013)。也供引用,这里是格式值。

MySQL 格式

  • %j = 年中的第几天 (001..366)。
  • %m = 月份,数字 (00..12)。
  • %y = 年份,数字(两位数)。

PHP 格式

  • z = 一年中的第几天,从 0 开始(0 到 365)。
  • m = 月份的数字表示,前导零(01 到 12)。
  • y = 年份的两位数表示(示例:99 或 03)。

MySQL 查询

SELECT FROM_UNIXTIME(1357018200, '%j-%m-%y');
-> 366-12-12

PHP 代码

echo date('z-m-y', 1357018200);
-> 0-01-13

任何帮助将不胜感激,感谢您的宝贵时间。 :)

其他信息

  • MySQL版本:5.5.23
  • MySQL system_time_zone:CDT
  • MySQL time_zone: SYSTEM
  • PHP date_default_timezone_get:美国/芝加哥 (CDT)

最佳答案

您的 PHP 和 MySQL 在时间上不一致。在以下位置使用时间转换器:

http://www.4webhelp.net/us/timestamp.php?action=stamp&stamp=1357018200&timezone=-6

给出结果“2012 年 12 月 31 日,星期一,23:30:00 (GMT -6)”,因此您的 PHP 给出了错误的结果。虽然你已经给出了 PHP 运行的时区,但你可以通过运行来仔细检查:

date_default_timezone_set ("America/Chicago");
echo date('z-m-y', 1357018200)."\r\n";

应该给出“365-12-12”。

我想可能是其他地方的时区设置不正确,或者“America/Chicago (CDT)”可能是您的 php.ini 文件中旧版 PHP 的旧设置。

查看来自 http://php.net/manual/en/timezones.america.php 的允许时区值列表没有列出“America/Chicago (CDT)”,因此您应该弄清楚它在哪里被设置为该虚假值,因为它可能会导致其他问题。

关于PHP 和 MySQL 为相同的时间戳返回不同的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13785113/

相关文章:

javascript - 页脚中有functions.php 脚本。不是头

php - PHP 中对象的差异集合

php - mysql在表A中查找一系列记录,复制到表B

php - Laravel 5.6,MySQL 5.7,无法选择新的 JSON 类型字段

python - Pandas 选择多个日期时间之间的数据框行

mysql:int 类型的最大值问题

mysql - 如何在大型数据库中优化数据库这个查询?

php - 在 PHPMyAdmin 中检索已删除的数据库

mysql - 选择当前日期和一周 InnoDB 之间的日期

java - 为什么日期时间的毫秒数 1-1-1970 00 :00:00 is in negative?