Проверка того, является ли текущий день днем ​​перехода между CST и CEST

Я умею проверять переходы в году, с

      $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 атрибут другой или есть хороший способ сделать это?

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)
Другие вопросы по тегам