Проверка того, является ли текущий день днем перехода между 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)