我遇到了一个有点令人沮丧的问题,我觉得有一个简单的解决方案。当我将相同的 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/