0
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 时间?

4

2 回答 2

2

当您从DateTime对象生成 unix 时间戳时,$utctime->format("U")您将丢失任何时区信息,它只会返回一个整数(unix 时间戳,但由于某种原因作为字符串),php 将使用当前默认时区威胁它。

只需将该format()方法与您的日期格式字符串一起使用:

function utcconvert($time) {
    // ...
    return $utctime->format($timeformat);
}

根据 php.net 网站上的评论,这背后的原因是DateTime对象在更改时区时不会更改内部时间戳值。

于 2013-07-05T22:06:05.543 回答
1

你传递一个字符串作为第二个参数,你应该传递一个 int (UNIX时间戳)试试:

return date($timeformat, $utctime->getTimeStamp());

编辑:

其实你可以用

return $utctime->format("U");

问题是你总是返回一个新的日期,因为你提供了一个错误的论据。你应该检查你的 php.ini,display_errors这样error_reporting你就可以看到 php 何时警告你这些事情

于 2013-07-05T22:05:04.200 回答