3v4l.org

run code in 300+ PHP versions simultaneously
<?php $timezoneUtc = new DateTimeZone('UTC'); $timezoneBerlin = new DateTimeZone('Europe/Berlin'); $timezoneAmsterdam = new DateTimeZone('Europe/Amsterdam'); $dateTimeA = new DateTimeImmutable('2025-03-30 00:00:00', $timezoneUtc); $dateTimeB = new DateTimeImmutable('2025-03-31 00:00:00', $timezoneUtc); $dateTimeC = new DateTimeImmutable('2025-03-29 00:00:00', $timezoneBerlin); $dateTimeD = new DateTimeImmutable('2025-03-31 00:00:00', $timezoneBerlin); $dateTimeE = new DateTimeImmutable('2025-03-29 00:00:00', $timezoneAmsterdam); $dateTimeF = new DateTimeImmutable('2025-03-31 00:00:00', $timezoneAmsterdam); function toIntervalSpecification(DateInterval $interval): string { $specification = 'P'; $specification .= $interval->y ? $interval->y . 'Y' : ''; $specification .= $interval->m ? $interval->m . 'M' : ''; $specification .= $interval->d ? $interval->d . 'D' : ''; if ($interval->h ?? $interval->i ?? $interval->s ?? 0) { $specification .= 'T'; $specification .= $interval->h ? $interval->h . 'H' : ''; $specification .= $interval->i ? $interval->i . 'M' : ''; $specification .= $interval->s ? $interval->s . 'S' : ''; } if ($specification[-1] === 'P') { $specification = 'PT0S'; } return $specification; } $diffTwoTimezoneSameDstRulesA = $dateTimeC->diff($dateTimeF, true); $diffTwoTimezoneSameDstRulesB = $dateTimeF->diff($dateTimeC, true); $diffTwoTimezoneSameDstRulesC = $dateTimeE->diff($dateTimeD, true); $diffTwoTimezoneSameDstRulesD = $dateTimeD->diff($dateTimeE, true); echo toIntervalSpecification($diffTwoTimezoneSameDstRulesA) . PHP_EOL; echo toIntervalSpecification($diffTwoTimezoneSameDstRulesB) . PHP_EOL; echo toIntervalSpecification($diffTwoTimezoneSameDstRulesC) . PHP_EOL; echo toIntervalSpecification($diffTwoTimezoneSameDstRulesD) . PHP_EOL;
Output for 8.2.1 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
P1DT23H P1DT23H P1DT23H P1DT23H
Output for 8.2.0
P-1Y11M29DT1H P-1Y11M26DT1H P-1Y11M29DT1H P-1Y11M26DT1H

preferences:
40.25 ms | 406 KiB | 5 Q