- array_map: documentation ( source)
- strpos: documentation ( source)
- array_keys: documentation ( source)
<?php
$timezoneAbbr = DateTimeZone::listAbbreviations();
$results = [];
foreach ($timezoneAbbr as $group => $timezones) {
foreach ($timezones as $timezoneData) {
if ($timezoneData['dst'] === false) {
continue;
}
$timezone = new DateTimeZone($timezoneData['timezone_id']);
$transitions = $timezone->getTransitions(1546322400, 1577858400);
if (!is_array($transitions)) {
continue;
}
foreach ($transitions as $transition) {
if (strpos($transition['time'], '2019-01-01') !== false) {
continue;
}
if ($transition['isdst'] === true) {
continue;
}
$date = new DateTime($transition['time']);
$date->modify('+1 hour')->modify('-1 second');
$date->setTimezone($timezone);
$date = DateTime::createFromFormat('Y-m-d H:i:s', $date->format('Y-m-d H:i:s'), $timezone);
if ($date->format('I') === '0') {
$results[$date->format(DateTime::ATOM).' '.$timezone->getName()] = 1;
}
}
}
}
array_map(function ($x) { echo $x, PHP_EOL; }, array_keys($results));