PHP时区转换/ PHP日期未显示正确的时区

时间:2013-03-20 22:54:50

标签: php datetime strtotime

我的服务器和MySQL数据库的默认时区设置为GMT。我的PHP代码将显示的日期转换为用户的本地时区(在本例中为Eastern):

$OPENED_DATE = '2013-03-20 21:05:00'
$OPENED_DATE = new DateTime($OPENED_DATE);
$OPENED_DATE->setTimeZone(new DateTimeZone('America/New_York'));

然后我输出用户的日期:

$OPENED_DATE = strtotime($OPENED_DATE->format('Y-m-d H:i:s'));      
$OPENED_DATE = date('F j, Y g:i A T', $OPENED_DATE);

$ OPENED_DATE的输出:2013年3月20日下午5:05 GMT

实际时间显示正确,但日期输出中的“T”仍显示GMT。有没有办法让它显示我们转换的时区而不是GMT的默认值。我知道这样做的唯一方法是每次都使用date_default_timezone_set切换到用户的时区,然后切换回GMT。但我觉得必须有一种更有效的方式...

谢谢!

2 个答案:

答案 0 :(得分:1)

这两行是多余的

$OPENED_DATE = strtotime($OPENED_DATE->format('Y-m-d H:i:s'));      
$OPENED_DATE = date('F j, Y g:i A T', $OPENED_DATE);

调用date()正在输出错误的时区。

为什么不试试:

$OPENED_DATE = $OPENED_DATE->format('F j, Y g:i A T');

DateTime对象中设置了时区,但是一旦将其转换为时间戳并使用date(),服务器时区将用于该时间。我认为只使用DateTime对象来格式化日期就足以做你想做的事了。

答案 1 :(得分:1)

由于您仅将时区设置应用于$OPENED_DATE变量,因此strtotime()date()功能不会收到相同的时区信息。

您只是将{/ 1}}中的年/月/日/小时/分/段传递给$OPENED_DATE,因此无法获取时区信息。

现在,您可以做的事情是使用strtotime()设置用于strtotime()date()等功能的默认时区。

但是,这仍然很麻烦,你不需要,因为已经有一个DateTime对象,你也可以继续使用它。

DateTime对象可让您直接输出格式化时间:

date_default_timezone_set()

因此完全跳过$OPENED_DATE->format('F j, Y g:i A T'); strtotime()步骤。