zona settimezone now mexico horaria gmdate date_default_timezone_set php time timezone utc gmt

settimezone - timezone utc php



¿Cuáles son las abreviaturas de la zona horaria "estándar"? (1)

Estoy almacenando el huso horario por desplazamiento desde UTC para una aplicación que usa este menú desplegable:

<select id="timezone" name="timezone" > <option value="-12">[UTC - 12] Baker Island Time</option> <option value="-11">[UTC - 11] Niue Time, Samoa Standard Time</option> <option value="-10">[UTC - 10] Hawaii-Aleutian Standard Time, Cook Island Time</option> <option value="-9.5">[UTC - 9:30] Marquesas Islands Time</option> <option value="-9">[UTC - 9] Alaska Standard Time, Gambier Island Time</option> <option value="-8">[UTC - 8] Pacific Standard Time</option> <option value="-7">[UTC - 7] Mountain Standard Time</option> <option value="-6">[UTC - 6] Central Standard Time</option> <option value="-5">[UTC - 5] Eastern Standard Time</option> <option value="-4.5">[UTC - 4:30] Venezuelan Standard Time</option> <option value="-4">[UTC - 4] Atlantic Standard Time</option> <option value="-3.5">[UTC - 3:30] Newfoundland Standard Time</option> <option value="-3">[UTC - 3] Amazon Standard Time, Central Greenland Time</option> <option value="-2">[UTC - 2] Fernando de Noronha Time, South Georgia &amp; the South Sandwich Islands Time</option> <option value="-1">[UTC - 1] Azores Standard Time, Cape Verde Time, Eastern Greenland Time</option> <option value="0">[UTC] Western European Time, Greenwich Mean Time</option> <option value="1">[UTC + 1] Central European Time, West African Time</option> <option value="2">[UTC + 2] Eastern European Time, Central African Time</option> <option value="3">[UTC + 3] Moscow Standard Time, Eastern African Time</option> <option value="3.5">[UTC + 3:30] Iran Standard Time</option> <option value="4">[UTC + 4] Gulf Standard Time, Samara Standard Time</option> <option value="4.5">[UTC + 4:30] Afghanistan Time</option> <option value="5">[UTC + 5] Pakistan Standard Time, Yekaterinburg Standard Time</option> <option value="5.5">[UTC + 5:30] Indian Standard Time, Sri Lanka Time</option> <option value="5.75">[UTC + 5:45] Nepal Time</option> <option value="6">[UTC + 6] Bangladesh Time, Bhutan Time, Novosibirsk Standard Time</option> <option value="6.5">[UTC + 6:30] Cocos Islands Time, Myanmar Time</option> <option value="7">[UTC + 7] Indochina Time, Krasnoyarsk Standard Time</option> <option value="8">[UTC + 8] Chinese Standard Time, Australian Western Standard Time, Irkutsk Standard Time</option> <option value="8.75">[UTC + 8:45] Southeastern Western Australia Standard Time</option> <option value="9">[UTC + 9] Japan Standard Time, Korea Standard Time, Chita Standard Time</option> <option value="9.5">[UTC + 9:30] Australian Central Standard Time</option> <option value="10">[UTC + 10] Australian Eastern Standard Time, Vladivostok Standard Time</option> <option value="10.5">[UTC + 10:30] Lord Howe Standard Time</option> <option value="11">[UTC + 11] Solomon Island Time, Magadan Standard Time</option> <option value="11.5">[UTC + 11:30] Norfolk Island Time</option> <option value="12">[UTC + 12] New Zealand Time, Fiji Time, Kamchatka Standard Time</option> <option value="12.75">[UTC + 12:45] Chatham Islands Time</option> <option value="13">[UTC + 13] Tonga Time, Phoenix Islands Time</option> <option value="14">[UTC + 14] Line Island Time</option>

Usando PHP, realmente no tengo las opciones más fáciles para convertir estas abreviaturas de zona horaria, mi única opción para hacerlo programáticamente sería ordenar a través de una lista de aproximadamente 400 abreviaturas de zona horaria. ¿Alguien sabe la lista que acompaña a este menú desplegable de lo que son cada una de las zonas horarias, y qué son cuando se produce el horario de verano? (Supongo que necesito definir ambas listas manualmente)

EDITAR: analizó esta lista en un abbr único para cada zona horaria, pero no son los "populares".

Mi nueva lista

[-12] => kwat [-11] => bst [-10] => ahst [-9.5] => ckhst [-9] => ahdt [-8] => akdt [-7] => east [-6] => cst [-5] => act [-4.5] => ant [-4] => acst [-3.5] => negt [-3] => adt [-2] => addt [-1] => azost [-0] => azomt [1] => bst [2] => bdst [3] => amt [3.5] => irst [4] => adt [4.5] => aft [5] => aktt [5.5] => ist [5.75] => npt [6] => aktst [6.5] => burt [7] => almst [8] => bnt [8.75] => cwst [9] => cdt [9.5] => cast [10] => chost [10.5] => cst [11] => anat [11.5] => lhst [12] => anast [12.75] => chast [13] => anast [14] => anast

Código:

$abbr = DateTimeZone::listAbbreviations(); $offsets=array(''-12'',''-11'',''-10'',''-9.5'',''-9'',''-8'',''-7'',''-6'', ''-5'',''-4.5'',''-4'',''-3.5'',''-3'',''-2'',''-1'',''-0'',''1'',''2'',''3'',''3.5'', ''4'',''4.5'',''5'',''5.5'',''5.75'',''6'',''6.5'',''7'',''8'',''8.75'',''9'',''9.5'', ''10'',''10.5'',''11'',''11.5'',''12'',''12.75'',''13'',''14''); $new = array(); $count = 0; $found = false; while($count < count($offsets)) { foreach($abbr as $k => $v) { foreach($v as $tz) { if($tz[''offset''] == $offsets[$count]*3600) { $new[$offsets[$count]] = $k; $found = true; break; } } if($found) { $found = false; break; } } $count++; } print_r($new);


¿Cuáles son las abreviaturas de la zona horaria "estándar"?

No hay estándares para esto. Las abreviaturas de zonas horarias no son oficialmente coordinadas por nadie. Hay algunos utilizados en IANA TZDB , pero muchos de ellos fueron elegidos al azar. A menudo se debate sobre qué abreviaciones se deben usar. Por ejemplo, mira cuántas publicaciones hubo sobre abreviaturas australianas en los archivos de la lista para abril de 2013 .

Otra lista de abreviaturas de zona horaria se puede encontrar aquí . Si miras de cerca, verás que muchos son ambiguos. Por ejemplo, CST podría ser "Hora estándar central" (EE. UU.), "Hora estándar de China" o "Hora estándar de Cuba". EST podría ser "Eastern Standard Time" (EE. UU.) U "Eastern Standard Time" (Australia).

Algunos no australianos podrían preferir AEST , pero ¿quién puede decir que A debería ser para Australia y no para América?

Otro ejemplo muy común, algunas personas usan HAST para Hawai, mientras que otras usan HST porque no les importa las islas Aleutianas en Alaska (que es lo que se supone que representa la A).

El punto es que cualquier lista de abreviaturas de zona horaria, en cualquier lugar que encuentre una, será subjetiva y obstinada. No hay un estándar

Estoy almacenando zona horaria por desplazamiento para una aplicación usando este menú desplegable:

Por favor no hagas eso. Un huso horario no es un desplazamiento, y hay muchos más de 24 de ellos. Lea la wiki de la etiqueta de la zona horaria , especialmente la sección titulada "Zona horaria! = Compensación".

De tus comentarios:

Me doy cuenta de esto ahora, sin embargo, el resto de la lógica de mi aplicación ya lo hace de esta manera, y hoy solo tengo que completar esto, así que no hay tiempo para cambiarlo.

Entonces muchos errores seguirán presentes en su aplicación. Simplemente no puede hacer esto de manera confiable, ni siquiera si su aplicación solo se ejecuta en los EE. UU. No importa en qué idioma o plataforma se encuentre, cualquier implementación que lo haga tendrá muchos errores de conversión.

Estoy de acuerdo con la codificación de estas matrices, simplemente no sé cuáles son las zonas populares fuera de los EE. UU., Pensé que esa lista ya existiría en alguna parte.

Cuando se trata de husos horarios, no debe codificar nada. Las reglas de zona horaria cambian todo el tiempo, porque están controladas por políticos en todos los países del mundo. Hay actualizaciones lanzadas varias veces al año a la base de datos de la zona horaria de la IANA . En el lado de PHP, la documentación de PHP deja en claro qué versión está disponible actualmente, y que las actualizaciones se manejan a través de timezonedb de PECL, que extrae sus datos de IANA.

En lo que respecta a lo que es "popular", eso también es muy subjetivo. Las zonas en el TZDB están todas allí por una razón u otra. El único lugar que conozco que ha intentado limitar esto es ActiveSupport :: TimeZone de Ruby on Rails. Afirman tener un "subconjunto significativo de 146 zonas", que puede ver en la constante MAPPING en esa página. Pero no dicen en qué proceso han decidido lo que se considera significativo, y hay omisiones claras. A menos que sepa con certeza dónde se ubicarán todos y cada uno de sus usuarios, no intentaré decidir a qué zonas limitar.

Si lo que buscas es algo más que una lista desplegable de todas las 578 zonas en el TZDB, puedes probar uno de estos enfoques:

  • Presente dos menús desplegables. El primero en seleccionar un país. El segundo para elegir una zona dentro de ese país. En PHP, puede ver que cuando llama a DateTimeZone::listIdentifiers , acepta un parámetro $country opcional para filtrar la lista.

    Un buen ejemplo de esto es en la configuración de Google Calendar:

  • Use un control basado en mapas para que su usuario pueda seleccionar su zona horaria por ubicación. Hay muchos de estos por ahí, pero mi favorito es este para JavaScript.

    Por ejemplo, podría verse así:

Tenga en cuenta que, si bien muestra la abreviatura TZDB de EDT aquí, se usa para una conveniencia de visualización. Debajo del capó, está seleccionando un valor como America/New_York .

En última instancia, lo que debe guardar para cada usuario es su clave de zona horaria IANA, como America/New_York . No puede hacer conversiones de zona horaria correctas con solo un valor de -5 , porque no tiene todas las reglas de cuándo cambiará a -4 .

Actualizar

Una cosa de la que no me había dado cuenta en tu publicación original, pero que has aclarado en los comentarios, es que estás usando esto para elegir una zona horaria de evento objetivo. Creo que debería haber preguntado primero por el contexto. Me acercaba a esto desde la perspectiva de elegir una zona horaria única para su usuario, en lugar de una zona horaria específica para un evento en particular.

Todo lo que necesitas para que un evento sea en el momento correcto es la compensación para ese momento. Entonces podría usar un menú desplegable como el que mostró en su pregunta, pero omitiría cualquier nombre de zona. Literalmente sería una lista de compensaciones de UTC-12:00 a UTC+14:00 . Parece que ya ha identificado que existe una compensación de 30 minutos y 45 minutos. Puede verificar sus suposiciones aquí si lo desea.

Sin embargo, el problema general es que mucha gente no sabe cuál debería ser el desplazamiento. Al poner una lista con el desplazamiento estándar para cada nombre de zona, puede inducir a error al usuario a elegir el desplazamiento incorrecto. Por ejemplo, podrían estar hablando de una fecha en el verano que debería caer en el horario de verano del este de EE. UU. (-4), pero escogen la opción -5 porque ven "oriental". Así que quitar los nombres te ayudará.

Si sigues el camino sugerido originalmente y les pido que escojan un huso horario real de IANA, eso funcionará mucho mejor para muchos escenarios. Sin embargo, todavía hay un escenario en el que debe pensar: cómo manejar tiempos ambiguos e inválidos . Esto sucede durante las transiciones DST.

Por ejemplo, podría seleccionar America/New_York , y elegir una hora a la 1:00 AM del 3 de noviembre de 2013. Hay dos instancias diferentes de eso debido a la transición descendente (una en EDT en -4 y otra en EST en -5). Por lo tanto, su aplicación debería verificar esto y preguntarle cuál de los dos significaba. Del mismo modo, si ingreso a las 2:00 a.m. del 10 de marzo de 2013, su aplicación debería decirme que esta vez no existe en esa zona (debido a la transición de primavera).

Con cualquiera de los enfoques, cuando se trata de almacenar realmente los tiempos del evento, asegúrese de almacenar la combinación de fecha-hora-compensación, o aplicar el desplazamiento para obtener una fecha-hora que está en UTC. No quiere que haya ninguna pregunta sobre qué momento real está representado por el evento.