PHP 的 DateTime 默认时区
PHP's DateTime default timezone
我最近才开始在 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 传递给构造函数也不起作用,因为 DateTime 在被赋予 UNIX 时间戳时会忽略它。 (如果我将常规日期字符串传递给构造函数,它会起作用)。
如果我这样做,日期就会正确显示:
$date->setTimezone(new DateTimeZone("Europe/Oslo"));
我真的不想在每次处理日期时都传递时区,但从看起来我可能必须传递时区?
我想是因为这里写的:
http://php.net/manual/en/datetime.construct.php
Note: The $timezone parameter and the current timezone are ignored
when the $time parameter either is a UNIX timestamp (e.g. @946684800)
or specifies a timezone (e.g. 2010-01-28T15:00:00+02:00).
您使用 UNIX 时间戳为构造函数中的 DateTime 对象设置日期。
尝试使用这种方式设置 DateTime 对象
$date = new DateTime('2000-01-01');
您好,您总是可以使用继承来绕过这个问题。
这是更明确的方式
**
class myDate extends DateTime{
public function __construct($time){
parent::__construct($time);
$this->setTimezone(new DateTimeZone("Europe/Oslo"));
}
}
$str = strtotime('2015-04-12');
$md = new myDate("@".$str);
echo $md->getTimezone()->getName();
**
我最近才开始在 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 传递给构造函数也不起作用,因为 DateTime 在被赋予 UNIX 时间戳时会忽略它。 (如果我将常规日期字符串传递给构造函数,它会起作用)。
如果我这样做,日期就会正确显示:
$date->setTimezone(new DateTimeZone("Europe/Oslo"));
我真的不想在每次处理日期时都传递时区,但从看起来我可能必须传递时区?
我想是因为这里写的: http://php.net/manual/en/datetime.construct.php
Note: The $timezone parameter and the current timezone are ignored when the $time parameter either is a UNIX timestamp (e.g. @946684800) or specifies a timezone (e.g. 2010-01-28T15:00:00+02:00).
您使用 UNIX 时间戳为构造函数中的 DateTime 对象设置日期。
尝试使用这种方式设置 DateTime 对象
$date = new DateTime('2000-01-01');
您好,您总是可以使用继承来绕过这个问题。 这是更明确的方式
**
class myDate extends DateTime{
public function __construct($time){
parent::__construct($time);
$this->setTimezone(new DateTimeZone("Europe/Oslo"));
}
}
$str = strtotime('2015-04-12');
$md = new myDate("@".$str);
echo $md->getTimezone()->getName();
**