mexico_city - php timezone
Convierta las fechas UTC a la hora local en PHP (9)
Responder
Convierta el horario de UTC a America / Denver
// create a $dt object with the UTC timezone
$dt = new DateTime(''2016-12-12 12:12:12'', new DateTimeZone(''UTC''));
// change the timezone of the object without changing it''s time
$dt->setTimezone(new DateTimeZone(''America/Denver''));
// format the datetime
$dt->format(''Y-m-d H:i:s T'');
Notas
time()
devuelve la marca de tiempo de unix , que es un número, no tiene zona horaria.
date(''Ymd H:i:s T'')
devuelve la fecha en la zona horaria local actual.
gmdate(''Ymd H:i:s T'')
devuelve la fecha en UTC
date_default_timezone_set()
cambia la zona horaria local actual
cambiar un tiempo en una zona horaria
// create a $dt object with the America/Denver timezone
$dt = new DateTime(''2016-12-12 12:12:12'', new DateTimeZone(''America/Denver''));
// change the timezone of the object without changing it''s time
$dt->setTimezone(new DateTimeZone(''UTC''));
// format the datetime
$dt->format(''Y-m-d H:i:s T'');
aquí puedes ver todas las zonas horarias disponibles
https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
aquí están todas las opciones de formateo
http://php.net/manual/en/function.date.php
Actualizar PHP zona horaria DB (en linux)
sudo pecl install timezonedb
Estoy almacenando las fechas UTC en el DB usando:
$utc = gmdate("M d Y h:i:s A");
y luego quiero convertir la fecha UTC guardada a la hora local del cliente.
¿Cómo puedo hacer eso?
Gracias
Aquí hay una forma directa de convertir la hora UTC del interrogador a la hora local. Esto es por un tiempo almacenado en una base de datos, etc., es decir, en cualquier momento. Solo tiene que encontrar la diferencia horaria entre la hora UTC y la hora local en la que está interesado y luego ajustar el tiempo UTC almacenado para agregarle la diferencia.
$df = "G:i:s"; // Use a simple time format to find the difference
$ts1 = strtotime(date($df)); // Timestamp of current local time
$ts2 = strtotime(gmdate($df)); // Timestamp of current UTC time
$ts3 = $ts1-$ts2; // Their difference
A continuación, puede agregar esta diferencia a la hora UTC almacenada. (En mi lugar, Atenas, la diferencia es exactamente 5:00:00)
Ejemplo:
$time = time() // Or any other timestamp
$time += $ts3 // Add the difference
$dateInLocal = date("Y-m-d H:i:s", $time);
Dado un huso horario local, como ''América / Denver'', puede usar la clase DateTime para convertir la marca de tiempo UTC a la fecha local:
$timestamp = *********;
$date = new DateTime("@" . $timestamp);
$date->setTimezone(new DateTimeZone(''America/Denver''));
echo $date->format(''Y-m-d H:i:s'');
Guardo la fecha en el DB en formato UTC pero luego se los muestro al usuario final en su zona horaria local
// retrieve
$d = (new /DateTime($val . '' UTC''))->format(''U'');
return date("Y-m-d H:i:s", $d);
La aritmética de fecha no es necesaria si solo desea mostrar la misma marca de tiempo en diferentes zonas horarias:
$format = "M d, Y h:ia";
$timestamp = gmdate($format);
date_default_timezone_set("UTC");
$utc_datetime = date($format, $timestamp);
date_default_timezone_set("America/Guayaquil");
$local_datetime = date($format, $timestamp);
La función strtotime
de PHP interpretará códigos de zona horaria, como UTC. Si obtiene la fecha de la base de datos / cliente sin el código de zona horaria, pero sabe que es UTC, puede agregarla.
Suponiendo que obtienes la fecha con el código de marca de tiempo (como "Fri Mar 23 2012 22:23:03 GMT-0700 (PDT)", que es lo que da el código de Javascript ""+(new Date())
):
$time = strtotime($dateWithTimeZone);
$dateInLocal = date("Y-m-d H:i:s", $time);
O si no lo hace, que es probable de MySQL, entonces:
$time = strtotime($dateInUTC.'' UTC'');
$dateInLocal = date("Y-m-d H:i:s", $time);
Primero, obtenga la fecha en UTC; ya lo hizo, así que este paso sería una llamada a la base de datos:
$timezone = "UTC";
date_default_timezone_set($timezone);
$utc = gmdate("M d Y h:i:s A");
print "UTC: " . date(''r'', strtotime($utc)) . "/n";
A continuación, configure su zona horaria local en PHP:
$timezone = "America/Guayaquil";
date_default_timezone_set($timezone);
Y ahora obtenga el desplazamiento en segundos:
$offset = date(''Z'', strtotime($utc));
print "offset: $offset /n";
Finalmente, agregue el desplazamiento a la marca de tiempo entera de su fecha de hora original:
print "LOCAL: " . date(''r'', strtotime($utc) + $offset) . "/n";
date()
y localtime()
usan la zona horaria local para el servidor a menos que se anule; puede anular la zona horaria utilizada con date_default_timezone_set()
.
http://www.php.net/manual/en/function.date-default-timezone-set.php
$UTC_Time = "2018-07-06 06:06:16";
echo "UTC Time ".$UTC_Time;
$Indian_Time = TimeConverion($UTC_Time);
echo "<br> Indian_Time ".$Indian_Time;
function TimeConverion($UTC_Time) {
date_default_timezone_set(''Europe/London'');
$sTime = date("Y-m-d h:i:sa");
$ts3 = strtotime(date("G:i:s"))-strtotime($sTime);
$utc = explode(" ",$UTC_Time);
$time = strtotime($utc[1]);
date_default_timezone_set("Asia/Calcutta");
$time += $ts3; // Add the difference
return $utc[0]." ".date("H:i:s", $time);
}