function utcconvert($time){
$timeformat="M j, Y g:i:s a";
$localtime = new DateTime($time, new DateTimeZone('America/New_York'));
$utctime = $localtime;
$utctime->setTimeZone(new DateTimeZone('UTC'));
return date($timeformat, $utctime->format("U"));
}
我到处都看过这个方法我寻找php时区转换,但我无法让它工作。我想从默认的mysql格式中取一个时间戳,然后用$ timeformat将其转换为UTC时间。
echo utcconvert("2013-07-05 16:23:29");
产量
Jul 5, 2013 4:23:29 pm
这是同一时间,转换为该格式。我有date_default_timezone_set("America/New_York");
设置。
如何解决此问题以将服务器时间(纽约)转换为UTC时间?
答案 0 :(得分:2)
当您使用DateTime
从$utctime->format("U")
对象生成unix时间戳时,您将丢失任何时区信息,它将只返回一个整数(unix stimestamp,但出于某种原因作为字符串)和php将使用当前的默认时区威胁它。
只需将format()
方法与日期格式字符串一起使用:
function utcconvert($time) {
// ...
return $utctime->format($timeformat);
}
According to a comment on the php.net site,其背后的原因是DateTime
对象在更改时区时不会更改内部时间戳值。
答案 1 :(得分:1)
您将字符串传递给第二个参数,您应该传递一个int(UNIX时间戳) 尝试:
return date($timeformat, $utctime->getTimeStamp());
编辑:
实际上,您可以使用
return $utctime->format("U");
问题在于你总是返回一个新的日期,因为你提供了一个不好的论点。你应该检查你的php.ini和display_errors
以及error_reporting
,这样你就可以看到php警告你这件事情