从unix时间戳创建php DateTime对象,将时区设置为一行

时间:2016-11-11 19:43:37

标签: php datetime

我知道在php中你可以从unix时间戳创建一个DateTime对象,并将其时区设置为多行,如下所示:

$date = new DateTime('@' . $timestamp);
$date_with_timezone = $date->setTimezone(new DateTimeZone('America/Chicago'));

我想在一条线上这样做。以下不起作用:

$date_with_timezone = new DateTime('@' . $timestamp, new DateTimeZone('America/Chicago'));

有没有办法从unix时间戳创建一个php DateTime对象,并在同一行上设置一个时区?

2 个答案:

答案 0 :(得分:4)

PHP版本5.4中引入了对实例化(例如(new foo)->bar())支持的类成员访问(请参阅release notes),因此您可以这样做: -

$date = (new DateTime('@' . $timestamp))->setTimezone(new DateTimeZone('America/Chicago'));

See it working

答案 1 :(得分:1)

有关时区文件的说明:
注意:

  

当$ time参数是UNIX时间戳(例如@ 946684800)或指定时区(例如2010-01-28T15:00:00 + 02:00)时,将忽略$ timezone参数和当前时区。 / p>

http://php.net/manual/en/datetime.construct.php

作为一种解决方法,您可以创建一个函数并传入时间戳和时区。然后,您可以实现将变量赋值保持在同一行的目标。在函数中,您可以使用时间戳创建DateTime对象,然后分配时区并将其返回。