setlocaltime - php zona horaria argentina
PHP UTC a hora local (4)
Entorno del servidor
Redhat Enterprise Linux
PHP 5.3.5
Problema
Digamos que tengo una fecha y hora UTC como 2011-04-27 02:45 y quiero convertirla a mi hora local, que es America / New_York.
Tres preguntas:
1.) Mi código a continuación podría resolver el problema, ¿está de acuerdo?
<?php
date_default_timezone_set(''America/New_York''); // Set timezone.
$utc_ts = strtotime("2011-04-27 02:45"); // UTC Unix timestamp.
// Timezone offset in seconds. The offset for timezones west of UTC is always negative,
// and for those east of UTC is always positive.
$offset = date("Z");
$local_ts = $utc_ts + $offset; // Local Unix timestamp. Add because $offset is negative.
$local_time = date("Y-m-d g:i A", $local_ts); // Local time as yyyy-mm-dd h:m am/pm.
echo $local_time; // 2011-04-26 10:45 PM
?>
2.) Pero, ¿el valor de $ offset se ajusta automáticamente para el horario de verano?
3.) Si no, ¿cómo debo modificar mi código para ajustarlo automáticamente a DST?
Gracias :-)
Esto hará lo que quieras usando las clases nativas de DateTime y DateTimeZone PHP:
$utc_date = DateTime::createFromFormat(
''Y-m-d G:i'',
''2011-04-27 02:45'',
new DateTimeZone(''UTC'')
);
$nyc_date = $utc_date;
$nyc_date->setTimeZone(new DateTimeZone(''America/New_York''));
echo $nyc_date->format(''Y-m-d g:i A''); // output: 2011-04-26 10:45 PM
Consulte la página del manual de DateTime :: createFromFormat para obtener más información.
Después de algunos experimentos entre zonas horarias que actualmente tienen y no tienen horario de verano , descubrí que esto tendrá en cuenta el horario de verano. La misma conversión que utiliza mi método anterior representa el mismo tiempo resultante.
Sé que esta es una publicación antigua, pero hay otra línea que debe agregar para obtener la hora correcta.
Antes de realizar la conversión a la hora local, debe configurar la zona horaria predeterminada en UTC de esta manera (si es la zona horaria de la hora que está proporcionando):
function GmtTimeToLocalTime($time) {
date_default_timezone_set(''UTC'');
$new_date = new DateTime($time);
$new_date->setTimeZone(new DateTimeZone(''America/New_York''));
return $new_date->format("Y-m-d h:i:s");
}
Voy a mejorar la respuesta de Hasin Hayder.
date_default_timezone_set(''America/New_York''); // Set timezone.
$utc_ts = strtotime("2011-04-27 02:45 UTC"); // UTC Unix timestamp.
echo date(''Y-m-d H:i:s a T'', $utc_ts);
Debe salir
2011-04-26 10:45:00 pm EDT
La diferencia es agregar la zona horaria de origen. ¡strtotime () acepta la zona horaria también sabes! :pag
date_default_timezone_set(''America/New_York''); // Set timezone.
$utc_ts = strtotime("2011-04-27 02:45"); // UTC Unix timestamp.
Justo después de ejecutar esto, $ utc_ts contiene la hora local. PHP maneja el DST en sí.
= H =