<?php /* * The timezone in these datetimes look the same but they are in fact represent different UTC offsets. * The 1st one maps to UTC+01 (BST) while the 2nd one maps to a UTC+00 (GMT). * This is because daylight saving time (DST) aka. clocks going forward/backward happen on different days in different years. */ $now = new DateTime('2018-03-26T08:00:00', new DateTimeZone('Europe/London')); $inAYear = new DateTime('2019-03-26T08:00:00', new DateTimeZone('Europe/London')); echo $now->format(DATE_ATOM) . PHP_EOL; // 2018-03-26T08:00:00+01:00 echo $inAYear->format(DATE_ATOM) . PHP_EOL; // 2019-03-26T08:00:00+00:00 echo $now->getTimezone()->getOffset($now) . PHP_EOL; // 3600 echo $inAYear->getTimezone()->getOffset($inAYear) . PHP_EOL; // 0 /* * If we set both timezone values to an absolute UTC+01 offset then the 1st one generates a valid * Europe/London BST datetime, however, the second one is not a valid Europe/London datetime * as on that datetime Europe/London maps to UTC+00 (GMT). */ $now = new DateTime('2018-03-26T08:00:00+01:00'); $inAYear = new DateTime('2019-03-26T08:00:00+01:00'); // not valid Europe/London echo $now->format(DATE_ATOM) . PHP_EOL; // 2018-03-26T08:00:00+01:00 echo $inAYear->format(DATE_ATOM) . PHP_EOL; // 2019-03-26T08:00:00+01:00 echo $now->getTimezone()->getOffset($now) . PHP_EOL; // 3600 echo $inAYear->getTimezone()->getOffset($inAYear) . PHP_EOL; // 3600