我遇到了一个令人沮丧的问题,我觉得有一个简单的解决方案。当我将相同的UNIX时间戳传递给PHP date
和MySQL FROM_UNIXTIME
方法时,它们返回两个截然不同的日期。我想从MySQL返回一个与PHP返回的值匹配的值。
这是我目前使用的代码及其输出。提供的时间戳代表日期Tue, 01 Jan 2013 (01/01/2013)
。另外参考,这里是格式值。
MySQL格式
PHP格式
MySQL查询
SELECT FROM_UNIXTIME(1357018200, '%j-%m-%y');
-> 366-12-12
PHP代码
echo date('z-m-y', 1357018200);
-> 0-01-13
非常感谢任何帮助,感谢您的时间。 :)
其他信息
答案 0 :(得分:2)
您的PHP和MySQL不同意时间。使用时间转换器:
http://www.4webhelp.net/us/timestamp.php?action=stamp&stamp=1357018200&timezone=-6
结果为“2012年12月31日星期一,23:30:00(格林威治标准时间-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)”,因此您应该找出它设置为该伪造值的位置,因为它可能会导致其他问题。
答案 1 :(得分:1)
一旦您解决了时区问题,您实际问题的答案就是:
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";
这将把PHP转换为每年0-365天,与MySQL的1-366天相同。