En PHP, puede saber si una fecha determinada es durante el período de horario de verano usando algo como esto:
$isDST = date("I", $myDate); // 1 or 0
El problema es que esto solo le dice si ese punto en el tiempo está en el horario de verano. ¿Existe una forma confiable de verificar si el horario de verano está vigente en cualquier momento en esa zona horaria?
Editar para aclarar:
- Brisbane, Australia no observa el horario de verano en ninguna época del año. Durante todo el año, es GMT + 10.
- Sídney, Australia lo hace, de octubre a marzo cuando cambia de GMT+10 a GMT+11.
Me pregunto si habría algún método existente, o una forma de implementar un método que funcione como tal:
timezoneDoesDST('Australia/Brisbane'); // false
timezoneDoesDST('Australia/Sydney'); // true
Solución
He encontrado un método que funciona usando la clase DateTimezone de PHP (PHP 5.2+)
function timezoneDoesDST($tzId) {
$tz = new DateTimeZone($tzId);
$trans = $tz->getTransitions();
return ((count($trans) && $trans[count($trans) - 1]['ts'] > time()));
}
o, si está ejecutando PHP 5.3+
function timezoneDoesDST($tzId) {
$tz = new DateTimeZone($tzId);
return count($tz->getTransitions(time())) > 0;
}
La función getTransitions()
proporciona información sobre cada vez que cambia el desplazamiento para una zona horaria. Esto incluye datos históricos (Brisbane tenía horario de verano en 1916… ¿quién lo sabía?), por lo que esta función verifica si hay un cambio de compensación en el futuro o no.
Otras respuestas
DateTimeZone::getTransitions podría ayudar.
Probablemente podrías alarlo:
$hasDst = date("I", strtotime('June 1')) !== date("I", strtotime('Jan 1'));
De lo contrario, tendría que analizar los archivos de datos zoneinfo basados en texto.