-1

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

$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属性是否不同,或者有什么好方法吗?

4

2 回答 2

0

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

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

没有找到更好的方法来做到这一点。

于 2021-10-11T07:41:00.953 回答
0

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

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)
于 2021-10-11T10:01:33.157 回答