PHP计算UTC时间错误

时间:2019-12-21 21:09:36

标签: php datetime utc

环境: PHP 7.3.13RC1; CentOS 7.7.1908;服务器时区“欧洲/柏林”

观察:

以下PHP脚本:

$date1=date_create("now");
$date2=date_create("now");
$date3=date_create("now");
$tz1=new DateTimeZone("Europe/Berlin");
$tz2=new DateTimeZone("UTC");
$tz3=new DateTimeZone("GMT");

echo "Current Set Times:","\n";
echo "Date 1: ", $date1->format(DateTime::ATOM), "\n";
echo "Date 2: ", $date2->format(DateTime::ATOM), "\n";
echo "Date 3: ", $date3->format(DateTime::ATOM), "\n";

$date1->setTimezone($tz1);
$date2->setTimezone($tz2);
$date3->setTimezone($tz3);
echo "Times with new Time Zone Set", "\n";
echo "Date 1: ", $date1->format(DateTime::ATOM), "\n";
echo "Date 2: ", $date2->format(DateTime::ATOM), "\n";
echo "Date 3: ", $date3->format(DateTime::ATOM), "\n";

输出结果:

Current Set Times:
Date 1: 2019-12-21T22:01:00+01:00
Date 2: 2019-12-21T22:01:00+01:00
Date 3: 2019-12-21T22:01:00+01:00
Times with new Time Zone Set
Date 1: 2019-12-21T22:01:00+01:00
Date 2: 2019-12-21T22:01:00+00:00
Date 3: 2019-12-21T21:01:00+00:00

我希望看到以下输出:

Current Set Times:
Date 1: 2019-12-21T22:01:00+01:00
Date 2: 2019-12-21T22:01:00+01:00
Date 3: 2019-12-21T22:01:00+01:00
Times with new Time Zone Set
Date 1: 2019-12-21T22:01:00+01:00
Date 2: 2019-12-21T21:01:00+00:00
Date 3: 2019-12-21T21:01:00+00:00

区别在于第二个日期的输出。与世界标准时间(UTC)的时间相差一小时(22:01:00而不是21:01:00)。

我在这里不知所措。我试图在php.ini中设置默认时区,但无济于事。

使用“ date”和“ date -u”给我正确的时间。

timedatectl给我以下输出: 当地时间:Sa 2019-12-21 22:06:49 CEST 世界标准时间:萨2019年12月21日21:06:49 UTC 时区:欧洲/柏林(CET,+ 0100)

也许其他人知道这里发生了什么。

1 个答案:

答案 0 :(得分:0)

我也无法复制。看here。 PHP的时区可能未正确设置。

将此添加为第一行

date_default_timezone_set("Europe/Berlin");

然后重试。