PHP DateTime 与时区的小时差给出 0 而不是 2

PHP DateTime difference in hours with timezone gives 0 instead of 2

我正在尝试构建一个时区列表,其中包含 php 时区代码和 UTC 之间的时差。

我尝试了几行带有差异的代码:

$utc_date = new DateTime(
    NULL,
    new DateTimeZone('UTC')
);
echo 'UTC:  ' . $utc_date->format('Y-m-d g:i A') . "<br>";

$cairo_date = new DateTime(
    NULL,
    new DateTimeZone('Africa/Cairo')
);
echo 'Cairo:  ' . $cairo_date->format('Y-m-d g:i A') . "<br>";

$diff = $utc_date->diff($cairo_date);
echo "Differences: " . $diff->h;

它输出:

UTC: 2020-05-17 9:14 PM
Cairo: 2020-05-17 11:14 PM
Differences: 0

我找不到为什么 diff 没有 return 正确的差异?

只是在不同的时区已经是同一时间了。 DateTime 构造函数中的第一个参数为 null,表示当前时间。

尝试:

//add
$utc_date->modify('+1 hour');

新输出将是:

UTC:  2020-05-17 11:01 PM
Cairo:  2020-05-18 12:01 AM
Differences: 1

您调用的 diff 函数将 return 不同的时间戳。所以,有相同的时刻将 return 0。你应该在它们之间调用不同的时区。例子:

$utc_date = new DateTime(
    NULL,
    new DateTimeZone('UTC')
);
echo 'UTC:  ' . $utc_date->format('Y-m-d g:i A') . "<br>";

$cairo_date = new DateTime(
    NULL,
    new DateTimeZone('Africa/Cairo')
);
echo 'Cairo:  ' . $cairo_date->format('Y-m-d g:i A') . "<br>";

$cairo_timeZone = timezone_open('Africa/Cairo');

echo "Differences: " . timezone_offset_get($cairo_timeZone, $utc_date)/3600; //hour