【问题标题】:Checking if current day is the changing day between CET and CEST检查当前日期是否是 CET 和 CEST 之间的变化日
【发布时间】:2021-11-28 07:03:12
【问题描述】:

我知道如何检查一年中的过渡,用

$to = (clone $from)->addYear;
$arrTrans = $tz->getTransitions($from->timestamp, $to->timestamp);

数组的第一个元素始终是当天。在这里它将返回 3 个元素,当前日期和发生变化的 2 天

所以,如果我想知道今天是否是过渡,我会这样做:

$to = (clone $from)->addDay();
$arrTrans = $tz->getTransitions($from->timestamp, $to->timestamp);

我总是会得到当天,但它不会告诉我是否是过渡日。

是否真的必须与前一天进行比较,并检查isdst 属性是否不同,或者有什么好的方法吗?

【问题讨论】:

  • 您确定指的是 CST(北美中部标准时间)而不是 CET(中欧时间)吗?
  • 哦,是的,确实是CET,我马上改正

标签: php laravel datetime timezone carbon


【解决方案1】:

我最终搜索了 3 月的最后一个星期日和 10 月的最后一个星期日。

如果这是当天,我会分别删除最后一个小时,或者添加一个额外的小时,复制我拥有的最新值。

没有找到更好的方法。

【讨论】:

  • 阅读您的回答,我怀疑您的问题与您问题的标题不同。
【解决方案2】:

仅仅检查某个日期的冬/夏时间是否有变化并不难。如果那天是夏令时或冬令时,那么第二天就不同了。

function isDayChangeCETtoCEST(DateTimeInterface $dt){
  $dayC = (clone $dt)->setTime(0,0,0);
  $flag0 = $dayC->format('I');
  $flag1 = $dayC->setTime(24,0,0)->format('I');
  return $flag0 == 0 AND $flag1 == 1;
}

function isDayChangeCESTtoCET(DateTimeInterface $dt){
  $dayC = (clone $dt)->setTime(0,0,0);
  $flag0 = $dayC->format('I');
  $flag1 = $dayC->setTime(24,0,0)->format('I');
  return $flag0 == 1 AND $flag1 == 0;
}

函数是如何使用的?

$date = new DateTime('2021-10-31');
$isChange = isDayChangeCESTtoCET($date);  //bool(true)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-17
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    相关资源
    最近更新 更多