Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 打印日期时间时的不同行为取决于时区的设置方式_Php_Timezone - Fatal编程技术网

Php 打印日期时间时的不同行为取决于时区的设置方式

Php 打印日期时间时的不同行为取决于时区的设置方式,php,timezone,Php,Timezone,为什么根据我在下面两段代码中设置时区的方式,我会得到不同的日期 // Setting timezone using setTimezone' $date1 = DateTime::createFromFormat('Y-m-d H:i:s', '2018-04-04 12:00:00'); $date1->setTimezone(new DateTimeZone('UTC')); $date1->add(new DateInterval('PT7776000S')); echo $

为什么根据我在下面两段代码中设置时区的方式,我会得到不同的日期

// Setting timezone using setTimezone' 
$date1 = DateTime::createFromFormat('Y-m-d H:i:s', '2018-04-04 12:00:00');
$date1->setTimezone(new DateTimeZone('UTC'));
$date1->add(new DateInterval('PT7776000S'));
echo $date1->format('c') . PHP_EOL;
打印
2018-07-03T10:00:00+00:00

// Setting timezone as a param to createFromFormat
$date2 = DateTime::createFromFormat('Y-m-d H:i:s', '2018-04-04 12:00:00', new DateTimeZone('UTC'));
$date2->add(new DateInterval('PT7776000S')); 
echo $date2->format('c') . PHP_EOL;

打印
2018-07-03T12:00:00+00:00

当您在没有时区信息的情况下实例化
DateTime
时,日期将以您默认的本地时区进行解释;然后,当您设置新时区时,日期将转换为该时区。即:

// Setting timezone as a param to createFromFormat
$date2 = DateTime::createFromFormat('Y-m-d H:i:s', '2018-04-04 12:00:00', new DateTimeZone('UTC'));
$date2->add(new DateInterval('PT7776000S')); 
echo $date2->format('c') . PHP_EOL;
$date1
在欧洲/柏林是12:00:00

$date1
现在是UTC的10:00:00


当您使用时区信息实例化
DateTime
时,日期将被解释为引用该时区中的某个时间,并且之后没有转换过程。即:


$date2
是UTC的12:00:00。

第二个示例似乎正确地将原始日期增加了90天(7776000秒)

我认为,在第一个示例中,您根据当前时区(默认)设置时间,然后转换为UTC,然后添加秒数

在第一个示例中,您将时区设置为UTC并设置时间,然后添加时间间隔

看看这个老问题的答案:

编辑:刚才看到@deceze已经给出了类似的回答。不过,请点击链接查看其他讨论/示例/等

$date1->setTimezone(new DateTimeZone('UTC'));
$date2 = DateTime::createFromFormat('Y-m-d H:i:s', '2018-04-04 12:00:00', new DateTimeZone('UTC'));