PHP 夏令时时区错误
PHP daylight saving wrong timezone
这个脚本应该打印
3600
7200
但它打印
3600
3600
为什么?据我所知php支持夏令时
date_default_timezone_set("Europe/Berlin");
$date1 = new DateTime();
$date1->setDate(2019,1,1); // winter time
$date1->setTime(0,0,0,0);
$date2 = new DateTime();
$date2->setDate(2019,6,1); // summer time
$date2->setTime(0,0,0,0);
$ref = new DateTime("now", new DateTimeZone("UTC"));
echo $date1->getTimeZone()->getOffset($ref);
echo "\n";
echo $date2->getTimeZone()->getOffset($ref);
echo "\n";
您的 $ref
变量代表 "now"。在 echo
语句中,您将 $ref
传递给 getOffset
,因此它正在获取当前偏移量。相反,传递 $date1
或 $date2
.
echo $date1->getTimeZone()->getOffset($date1);
echo "\n";
echo $date2->getTimeZone()->getOffset($date2);
echo "\n";
或者更好的是,直接调用 getOffset()
:
echo $date1->getOffset();
echo "\n";
echo $date2->getOffset();
echo "\n";
这个脚本应该打印
3600
7200
但它打印
3600
3600
为什么?据我所知php支持夏令时
date_default_timezone_set("Europe/Berlin");
$date1 = new DateTime();
$date1->setDate(2019,1,1); // winter time
$date1->setTime(0,0,0,0);
$date2 = new DateTime();
$date2->setDate(2019,6,1); // summer time
$date2->setTime(0,0,0,0);
$ref = new DateTime("now", new DateTimeZone("UTC"));
echo $date1->getTimeZone()->getOffset($ref);
echo "\n";
echo $date2->getTimeZone()->getOffset($ref);
echo "\n";
您的 $ref
变量代表 "now"。在 echo
语句中,您将 $ref
传递给 getOffset
,因此它正在获取当前偏移量。相反,传递 $date1
或 $date2
.
echo $date1->getTimeZone()->getOffset($date1);
echo "\n";
echo $date2->getTimeZone()->getOffset($date2);
echo "\n";
或者更好的是,直接调用 getOffset()
:
echo $date1->getOffset();
echo "\n";
echo $date2->getOffset();
echo "\n";