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

SMS*_*MSM 30 php timezone

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

Gly*_*ine 68

echo date('I');
Run Code Online (Sandbox Code Playgroud)

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

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

希望能帮助到你.

  • 没有理由将`time()`作为第二个参数传递给`date()`,它默认使用当前时间:http://www.php.net/manual/en/function.date.php (15认同)
  • 我想在此注意,这是特定于默认值或设置时区`(date_default_timezone_set('string');`.例如,如果时区在亚利桑那州,那么它总是返回false,因为亚利桑那州没有DST. (4认同)
  • @Max,这可以使用 DateTime 接口实现。```php $date = new DateTime('now', new DateTimeZone('美国/凤凰城')); var_dump($date->format('I')); ```` (2认同)

Cul*_*lly 7

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

date('I')"1"如果服务器/PHP 时区处于 DST,则返回,否则返回"0"

要查明特定时区是否处于夏令时,请使用:

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

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

为了概括这一点,并获取布尔值而不是字符串:

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

注意:您还可以使用此方法来查明特定时区是否有任何日期/时间处于夏令时。只需替换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
Run Code Online (Sandbox Code Playgroud)