mexico_city datetimezone date_default_timezone_set buenos america aires php timezone

datetimezone - Convierta hora y fecha de una zona horaria a otra en PHP



timezone laravel (4)

Básicamente, lo que necesito es una secuencia de comandos que, cuando se proporciona con una hora y una zona horaria, puede devolver la hora en otra zona horaria.

Mis principales problemas son:

  • Dónde obtener la compensación de tiempo de GMT desde - ¿hay una base de datos pública disponible para esto?
  • Cómo también tomar en consideración las diferencias de horario de verano (DST) también.
  • ¿Cómo se puede incluir todo dentro de una clase de PHP? ¿O hay una clase de ese tipo ya disponible?

Aquí uso esta función para convertir datetime en otra zona horaria. Para obtener el mejor resultado, si convierte su fecha y hora en la zona horaria utc y luego la convierte en la zona horaria requerida, entonces es mejor resultado para ella.

function ConvertTimezoneToAnotherTimezone($time, $currentTimezone, $timezoneRequired) { $dayLightFlag = false; $dayLgtSecCurrent = $dayLgtSecReq = 0; $system_timezone = date_default_timezone_get(); $local_timezone = $currentTimezone; date_default_timezone_set($local_timezone); $local = date("Y-m-d H:i:s"); /* Uncomment if daylight is required */ // $daylight_flag = date("I", strtotime($time)); // if ($daylight_flag == 1) { // $dayLightFlag = true; // $dayLgtSecCurrent = -3600; // } date_default_timezone_set("GMT"); $gmt = date("Y-m-d H:i:s "); $require_timezone = $timezoneRequired; date_default_timezone_set($require_timezone); $required = date("Y-m-d H:i:s "); /* Uncomment if daylight is required */ // $daylight_flag = date("I", strtotime($time)); // if ($daylight_flag == 1) { // $dayLightFlag = true; // $dayLgtSecReq = +3600; // } date_default_timezone_set($system_timezone); $diff1 = (strtotime($gmt) - strtotime($local)); $diff2 = (strtotime($required) - strtotime($gmt)); $date = new DateTime($time); $date->modify("+$diff1 seconds"); $date->modify("+$diff2 seconds"); if ($dayLightFlag) { $final_diff = $dayLgtSecCurrent + $dayLgtSecReq; $date->modify("$final_diff seconds"); } $timestamp = $date->format("Y-m-d H:i:s "); return $timestamp; }

Gracias.


Sé que es tarde. Para cualquiera que desee una función simple para convertir utc en cualquier zona horaria local

function UTCTimeToLocalTime($time, $tz = '''', $FromDateFormat = ''Y-m-d H:i:s'', $ToDateFormat = ''Y-m-d H:i:s'') { if ($tz == '''') $tz = date_default_timezone_get(); $utc_datetime = DateTime::createFromFormat($FromDateFormat, $time, new DateTimeZone(''UTC'')); $local_datetime = $utc_datetime; $local_datetime->setTimeZone(new DateTimeZone($tz)); return $local_datetime->format($ToDateFormat); } echo UTCTimeToLocalTime(''2015-07-01 13:30:00'',''America/Denver'');


prueba esto, podría ayudar :)

function converToTz($time="",$toTz='''',$fromTz='''') { // timezone by php friendly values $date = new DateTime($time, new DateTimeZone($fromTz)); $date->setTimezone(new DateTimeZone($toTz)); $time= $date->format(''Y-m-d H:i:s''); return $time; }


<?php $date = new DateTime(''2000-01-01'', new DateTimeZone(''Pacific/Nauru'')); echo $date->format(''Y-m-d H:i:sP'') . "/n"; $date->setTimezone(new DateTimeZone(''Pacific/Chatham'')); echo $date->format(''Y-m-d H:i:sP'') . "/n"; ?>

Los ejemplos anteriores darán como resultado:

2000-01-01 00:00:00+12:00 2000-01-01 01:45:00+13:45

encontrado en el Manual de DateTime en php.net

EDITAR: Al igual que Pekka, dijo: La clase DateTime existe a partir de 5.2 y allí primero tienes que averiguar cuáles de los métodos están realmente implementados y cuáles solo existen desde 5.3 en adelante.