PHP&;MySQL正在为同一时间戳返回不同的日期
我遇到了一个稍微令人沮丧的问题,我觉得有一个简单的解决办法。当我从_UNIXTIME方法向PHPPHP&;MySQL正在为同一时间戳返回不同的日期,php,mysql,date,time,format,Php,Mysql,Date,Time,Format,我遇到了一个稍微令人沮丧的问题,我觉得有一个简单的解决办法。当我从_UNIXTIME方法向PHPdate和MySQL传递相同的UNIX时间戳时,它们返回的是两个非常不同的日期。我想从MySQL返回一个与PHP返回的值匹配的值 下面是我当前使用的代码及其输出。提供的时间戳表示日期周二,2013年1月1日(2013年1月1日)。以下是格式值,仅供参考 MySQL格式 %j=一年中的某一天(001..366) %m=月份,数字(00..12) %y=年份,数字(两位数) PHP格式 z=从0(0
date
和MySQL传递相同的UNIX时间戳时,它们返回的是两个非常不同的日期。我想从MySQL返回一个与PHP返回的值匹配的值
下面是我当前使用的代码及其输出。提供的时间戳表示日期周二,2013年1月1日(2013年1月1日)
。以下是格式值,仅供参考
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系统\u时区:CDT
- MySQL时区:系统
- PHP日期\默认\时区\获取:美国/芝加哥(CDT)
您的PHP和MySQL在时间上不一致。在以下位置使用时间转换器:
给出结果“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中的旧设置
查看允许的时区值列表时,没有列出“America/Chicago(CDT)”,因此您应该找出将其设置为该伪值的位置,因为它可能会导致其他问题。一旦您解决了时区问题,实际问题的答案是:
function sqlStyleDate($timestamp){
$dayOfYear = date("z", $timestamp) + 1;
$year = date("y", $timestamp);
$month = date("n", $timestamp);
$result = "$dayOfYear-$year-$month";
return $result;
}
echo sqlStyleDate(1357018200)."\r\n";
这将把PHPs转换为一年中的0-365天,与MySQL的1-366天相同。我认为这可能是一个时区问题。检查MySQL(显示变量,如“%time_zone”;
)和PHP使用了什么时区()。是的,除了发布这些变量,您还可以发布您正在使用的MySQL版本。我已经用时区信息和SQL版本更新了帖子。:)MySQL返回'2012-12-09'和'00:45:19'。PHP返回'Sun,09 Dec 12 00:45:19-0600'。强制它设置时区确实会使它返回预期值,这很奇怪,因为我的脚本都没有弄乱时区。非常感谢你的帮助!您可能应该将其编辑到您现有的答案中,因为它直指问题的核心,在其他方面是正确的。