最近我开始在PHP中使用DateTime对象,但现在我还不能弄清楚这个问题。
我以为DateTime
会考虑我使用date_default_timezone_set
设置的默认时区,但显然它并没有:
date_default_timezone_set('Europe/Oslo');
$str = strtotime('2015-04-12');
$date = new DateTime("@".$str);
$response['TZ'] = $date->getTimezone()->getName();
$response['OTZ'] = date_default_timezone_get();
$response['Date'] = $date->format('Y-m-d');
echo json_encode($response);
这是我所收到的响应:
{
"TZ":"+00:00",
"OTZ":"Europe\/Oslo",
"Date":"2015-04-11"
}
将正确的DateTimeZone传递给构造函数也不起作用,因为当给定UNIX时间戳时,DateTime会忽略它。(如果我传递常规日期字符串到构造函数,则可以正常工作)。
如果我这样做,日期就会显示正确:
$date->setTimezone(new DateTimeZone("Europe/Oslo"));
我真的不想每次处理日期时都必须传递时区,但看起来我可能必须这样做?
DateTime
始终默认为UTC。 - The Onin