php - 如何判断一个时区是否在一年中的任何时间遵守夏令时?

标签 php datetime timezone dst

在 PHP 中,您可以使用如下内容判断给定日期是否在夏令时期间:

$isDST = date("I", $myDate); // 1 or 0

问题是这只会告诉您某个时间点是否在 DST 中。有没有一种可靠的方法可以随时检查该时区的 DST 是否生效?


编辑以澄清:

  • 澳大利亚布里斯类在一年中的任何时候都不实行夏令时。全年都是 GMT+10。
  • 澳大利亚悉尼从 10 月到次年 3 月从 GMT+10 变为 GMT+11。

我想知道是否有一些现有的方法,或者一种方法来实现这样工作的方法:

timezoneDoesDST('Australia/Brisbane');  // false
timezoneDoesDST('Australia/Sydney');  // true

最佳答案

我找到了一种使用 PHP 的 DateTimezone 类 (PHP 5.2+) 的方法

function timezoneDoesDST($tzId) {
    $tz = new DateTimeZone($tzId);
    $trans = $tz->getTransitions();
    return ((count($trans) && $trans[count($trans) - 1]['ts'] > time()));
}

或者,如果您运行的是 PHP 5.3+

function timezoneDoesDST($tzId) {
    $tz = new DateTimeZone($tzId);
    return count($tz->getTransitions(time())) > 0;
}

getTransitions()函数为您提供有关时区偏移量每次更改的信息。这包括历史数据(布里斯类在 1916 年有夏令时......谁知道呢?),因此该函数检查 future 是否有偏移量变化。

关于php - 如何判断一个时区是否在一年中的任何时间遵守夏令时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15778920/

相关文章:

Python 现在日期时间与现在日期时间的区别

javascript - Java/Jmeter 在纪元上添加 15 秒

ruby - 将 UTC 时间转换为太平洋时间

javascript - 如何使美化代码在一行中工作?

javascript - Php JSON 编码数组和解码中的意外标记错误

c# - 将 UTC 日期时间转换为另一个时区

javascript - 黑莓浏览器 Javascript 时间 DST 问题

php - 如何获取时区信息

php - 解析 WordPress 帖子内容

php - Class::getInstance 的起源/解释?