Calculate if DST active for a given timestamp and offset
给定相对于UTC的unix时间戳和时区偏移量(例如-5),是否可以计算DST是否有效?
我可以这样做:
1 2 3
| <?php
echo 'DST enabled? ' . date('I', 1345731453) ."";
?> |
但是我看不到如何传递偏移量或TimeZone。
我也猜测时区和偏移之间存在差异,因为特定国家支持DST?
欣赏任何想法。
-
确实如此,UTC偏移量并没有说明它是哪个国家,这意味着你无法真正确定DST设置。
-
谢谢,我想我找到了我的解决方案 - stackoverflow.com/questions/1586552/…
正确,您需要从date和tz开始确定偏移量。
在5.3+中,您可以获得开始/结束时段的转换,因此您可以只使用两者的时间戳,如下所示:
1 2 3 4 5
| $inputTime = $your_unix_timestamp;
$inputTZ = new DateTimeZone('Europe/London');
$transitions = $inputTZ->getTransitions($inputTime,$inputTime);
$offset = $transitions[0]['offset']; |
$offset是相关时间的DST偏移量
-
太棒了,非常感谢!
-
小警告:在您的示例中,$ offset将保留GMT + 0的完整偏移量,而不仅仅是DST添加的量。 所以在这种情况下它可以工作,因为你使用伦敦作为你的时区。 但如果你要使用雅典(夏季GMT + 3),$ offset将是10800(3小时),而不是3600(1小时DST偏移)我自己仍在研究这个,但我认为最好的方法是 查看DST是否处于活动状态,是否使用DateTime的格式('I')。
-
Thanx这对我来说简化了一些事情。
获取时区:
1
| $old_zone = ini_get('date.timezone'); |
将其更改为您想要的那个:
1
| ini_set('date.timezone', 'Europe/Brussels'); |
还原:
1
| ini_set('date.timezone', $old_zone); |
PHP时间戳始终为UTC。 根据您的时区设置,它确定显示的时间。