【问题标题】:How to deal with winter and summer time如何处理冬夏时节
【发布时间】:2021-12-23 04:24:08
【问题描述】:

这是我的问题:

我们的服务器在一个延迟的日期运行;

$now = new \DateTime("now", new \DateTimeZone('Europe/Paris') );

意思是即使在法国实际上是下午 4 点,我们的服务器也会说现在是下午 2 点(或者可能是下午 6 点,我不记得方向......但我们有 2 小时的差异)。

不是php的原因,是我们服务器配置的原因。

当时钟改变并且我们几周前进入冬季时......差异从 2h diff 变为 1h diff。

这意味着我必须调整我的代码

$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"));

这样我就可以根据服务器正确地接收小时...但是...您看到了我要去的地方...一旦夏季时间将再次来临...我将不得不再次更改。

所以,我的问题来了:给定特定日期,我是否有办法知道该日期是在冬季时间还是夏季时间?没有得到日期和时间...只是得到对冬季或夏季问题的答复?

【问题讨论】:

    标签: php datetime timezone


    【解决方案1】:

    您可以检查在给定时区是否有夏令时活动。

    $date = new DateTime('now', new DateTimeZone('Europe/Berlin'));
    $interval = $date->format('I') > 0 ? 'PT2H' : 'PT1H';
    $now = $date->sub(new DateInterval($interval));
    

    documentation 中所述,die I 检查日期是否处于夏令时。如果在冬季则返回 0,如果在夏季则返回 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-29
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      相关资源
      最近更新 更多