verano usa unidos termina miami mexico horario florida estados cuando cambio california php dst gmt binary-search-tree

php - usa - horario verano 2018 estados unidos



Detección de horario de verano en PHP (3)

¿Necesita saber todos los detalles de la transición DST usted mismo? ¿O simplemente necesita saber cuándo son las 9:00 am en una zona horaria determinada?

Si es lo último, PHP puede usar la base de datos de zona horaria de su sistema operativo para hacerlo por usted. La función strtotime() es notablemente buena para "entender" lo que quieres decir:

echo strtotime("today 9:00 am America/New_York"); // prints "1306501200" echo strtotime("today 9:00 am Europe/London"); // prints "1306483200"

Solo asegúrate de estar usando una de las zonas horarias compatibles con PHP .

Necesito enviar un correo electrónico a los usuarios en cualquier lugar del mundo a las 9:00 am hora local. El servidor está en el Reino Unido. Lo que puedo hacer es configurar una diferencia de tiempo entre cada usuario y la hora del servidor, lo que funcionaría perfectamente si DST no existiera.

Aquí hay un ejemplo para ilustrarlo:

  • John trabaja en Nueva York, a 5 horas del servidor (Reino Unido).
  • Richard trabaja en Londres, Reino Unido, así que 0 horas de diferencia con el servidor.

Cuando el servidor pasa de GMT a GMT +1 (BST) a las 2:00 am de un domingo determinado, esto significa que John ahora tiene una diferencia horaria de -6H ahora.

Todavía puedo manejar este escenario actualizando a todos los usuarios fuera de la hora local del servidor, pero una vez que avancé / retrocedí la hora de todos los demás usuarios, todavía necesito una forma de detectar cuándo (fecha y hora) viven los usuarios. fuera del Reino Unido cambiará (o no cambiará) su hora local a una hora DST probable.

Necesito un método PHP para saber / detectar cuándo otras partes del mundo entrarán / saldrán de horario de verano.


Cambiando un poco mi respuesta: DateTimeZone::getTransitions parece que hará lo que necesites, siempre que tengas PHP> = 5.2.

De un comentario en la documentación:

<?php $theTime = time(); // specific date/time we''re checking, in epoch seconds. $tz = new DateTimeZone(''America/Los_Angeles''); $transition = $tz->getTransitions($theTime, $theTime); // only one array should be returned into $transition. Now get the data: $offset = $transition[0][''offset'']; $abbr = $transition[0][''abbr'']; ?>

Entonces, todo lo que tenemos que hacer es pasar en la zona horaria que queremos verificar y podemos saber si esa zona horaria está en horario de verano (DST) / cuál es el desplazamiento. A continuación, deberá verificar la compensación con GMT para ver si desea enviar su correo electrónico ahora o no ahora.


Como Jimmy señala, puede usar transiciones de zona horaria, pero esto no está disponible en PHP <5.3. como dateTimeZone () es PHP> = 5.2.2 pero getTransitions () con argumentos no lo es! En ese caso, aquí hay una función que puede proporcionarle datos de zona horaria, incluso si está en horario de verano o no.

function timezonez($timezone = ''Europe/London''){ $tz = new DateTimeZone($timezone); $transitions = $tz->getTransitions(); if (is_array($transitions)){ foreach ($transitions as $k => $t){ // look for current year if (substr($t[''time''],0,4) == date(''Y'')){ $trans = $t; break; } } } return (isset($trans)) ? $trans : false; }

Dicho esto, hay un método más simple que usa date () si solo necesitas saber si una zona horaria está en horario de verano. Por ejemplo, si desea saber si el Reino Unido está en horario de verano, puede hacer esto:

date_default_timezone_set(''Europe/London''); $bool = date(''I''); // this will be 1 in DST or else 0

... o suministre una marca de tiempo como segundo argumento hasta la fecha () si desea especificar una fecha diferente a la hora actual del servidor.