Php 如何从给定的W3C日期字符串创建新的DateTime实例?

Php 如何从给定的W3C日期字符串创建新的DateTime实例?,php,datetime,locale,date-format,date-formatting,Php,Datetime,Locale,Date Format,Date Formatting,我想创建一个DateTime对象,它还应该根据给定的W3C日期字符串设置正确的时区。W3C日期的一个例子是:2014-03-12T09:30:04+0000 我在谷歌上搜索了很多,却找不到解决办法 到目前为止,我得到的是: $dt = new DateTime(); $dt->setTimestamp(strtotime('2014-03-12T09:30:04+0000')); var_dump($dt); 但我认为这忽略了时区,不是吗?你试过这个吗 $dt = new DateTim

我想创建一个DateTime对象,它还应该根据给定的W3C日期字符串设置正确的时区。W3C日期的一个例子是:
2014-03-12T09:30:04+0000

我在谷歌上搜索了很多,却找不到解决办法

到目前为止,我得到的是:

$dt = new DateTime();
$dt->setTimestamp(strtotime('2014-03-12T09:30:04+0000'));
var_dump($dt);

但我认为这忽略了时区,不是吗?

你试过这个吗

$dt = new DateTime('2014-03-12T09:30:04+0000');
print_r($dt);
我的输出:

DateTime Object
(
    [date] => 2014-03-12 09:30:04
    [timezone_type] => 1
    [timezone] => +00:00
)
因此,它可以很好地保存时区,但您可能无法很好地解释输出;如果你想在当地时间打印,那么你必须进行一些转换。

试试看

$dt = new DateTime('2014-03-12T09:30:04+0400');
var_dump($dt);
最后4个数字用于定义您的时区

输出

object(DateTime)#1 (3) {
    ["date"]=>
    string(19) "2014-03-12 09:30:04"
    ["timezone_type"]=>
    int(1)
    ["timezone"]=>
    string(6) "+04:00"
}

总之,不,它不忽略时区。

不,它不忽略时区,您只是认为因为您错误地解释了调试输出。谢谢,通过在
DateTime
对象上将时区设置为
Europe/Berlin
,解决了我的问题。