如何应对冬夏令时
How to deal with winter and summer time
这是我的问题:
我们的服务器运行日期有延迟;
$now = new \DateTime("now", new \DateTimeZone('Europe/Paris') );
意思是即使在法国实际上是下午 4 点,我们的服务器也会说是下午 2 点(或者可能是下午 6 点,我不记得方向了……但我们有 2 小时的差异)。
这不是因为 php,而是因为我们的服务器配置。
当时钟改变并且我们在几周前进入冬季时...三角差从 2 小时差异变为 1 小时差异。
这意味着我必须调整我的代码
从
出发
$nowBeforeDelta = new \DateTime("now", new \DateTimeZone($gmt) );
$now = $nowBeforeDelta->sub(new \DateInterval("PT2H"));
到
$nowBeforeDelta = new \DateTime("now", new \DateTimeZone($gmt) );
$now = $nowBeforeDelta->sub(new \DateInterval("PT1H"));
通过这种方式,我可以根据服务器正确接收小时数...但是...您看到我要去的地方...一旦夏季时间再次到来...我将不得不更改再次.
所以,我的问题来了:给定一个特定日期,我是否有办法知道该日期是冬令时还是夏令时?没有得到日期和时间...只是得到对冬天或夏天问题的答复?
您可以检查给定时区是否有夏令时。
$date = new DateTime('now', new DateTimeZone('Europe/Berlin'));
$interval = $date->format('I') > 0 ? 'PT2H' : 'PT1H';
$now = $date->sub(new DateInterval($interval));
如 documentation 中所述,die I
检查日期是否为夏令时。 returns如果在冬季则为 0,如果在夏季则为 1。
这是我的问题:
我们的服务器运行日期有延迟;
$now = new \DateTime("now", new \DateTimeZone('Europe/Paris') );
意思是即使在法国实际上是下午 4 点,我们的服务器也会说是下午 2 点(或者可能是下午 6 点,我不记得方向了……但我们有 2 小时的差异)。
这不是因为 php,而是因为我们的服务器配置。
当时钟改变并且我们在几周前进入冬季时...三角差从 2 小时差异变为 1 小时差异。
这意味着我必须调整我的代码
从
出发$nowBeforeDelta = new \DateTime("now", new \DateTimeZone($gmt) );
$now = $nowBeforeDelta->sub(new \DateInterval("PT2H"));
到
$nowBeforeDelta = new \DateTime("now", new \DateTimeZone($gmt) );
$now = $nowBeforeDelta->sub(new \DateInterval("PT1H"));
通过这种方式,我可以根据服务器正确接收小时数...但是...您看到我要去的地方...一旦夏季时间再次到来...我将不得不更改再次.
所以,我的问题来了:给定一个特定日期,我是否有办法知道该日期是冬令时还是夏令时?没有得到日期和时间...只是得到对冬天或夏天问题的答复?
您可以检查给定时区是否有夏令时。
$date = new DateTime('now', new DateTimeZone('Europe/Berlin'));
$interval = $date->format('I') > 0 ? 'PT2H' : 'PT1H';
$now = $date->sub(new DateInterval($interval));
如 documentation 中所述,die I
检查日期是否为夏令时。 returns如果在冬季则为 0,如果在夏季则为 1。