如何在 PHP 中自动检测日光节省?

2022-08-30 13:53:40

如何在 PHP 中自动检测日光节省?


答案 1
echo date('I');

I(大写字母 i)是 1/0,表示夏令时当前是否有效。

http://php.net/manual/en/function.date.php

希望它有帮助。


答案 2

这是作为对另一个答案的评论发布的。这是正确的答案,对其他人来说很有价值。当前标记为正确的答案仅在您想要了解服务器/PHP 时区中的夏令时 (DST) 时才有效。它不适用于任何时区(或者如果您的服务器/ PHP时区设置为UTC)。

date('I')如果服务器/PHP 时区处于 DST 中,或者不是 DST,则将返回。"1""0"

若要了解特定时区是否采用 DST,请使用:

$date = new DateTime('now', new DateTimeZone('America/Los_Angeles'));
var_dump($date->format('I'));

替换为您感兴趣的任何时区。America/Los_Angeles

要概括这一点,并获取布尔值而不是字符串,请执行以下操作:

function getIsDaylightSaving($timezoneStr = 'America/Los_Angeles') {
  $date = new DateTime('now', new DateTimeZone($timezoneStr));
  return (bool) $date->format('I');
}

注意:您还可以使用此方法查明特定时区的任何日期/时间是否采用 DST 格式。只需替换为特定的日期/时间字符串即可。例如,要了解美国东部时区的 DST 中是否为 DST,请执行以下操作:DateTime('now')11:14pm on December 20th, 2021

$date = new DateTime('2020-12-20 23:14', new DateTimeZone('America/New_York'));
var_dump((bool) $date->format('I')); // returns false

// or a date/time that was in DST
$date = new DateTime('2020-03-20 23:14', new DateTimeZone('America/New_York'));
var_dump((bool) $date->format('I')); // returns true

推荐