/ / Cambio de la zona horaria de una fecha recuperada en php - php, date, datetime, drupal

Cambiar la zona horaria de una fecha recuperada en php - php, date, datetime, drupal

Estoy recuperando una fecha en formato 2013-09-15 08:45:00 de la base de datos, que está configurada en UTC y necesito cambiarla a otra zona horaria dinámica (basada en el usuario)

Hasta ahora tengo

$datetime = $row->field_data_field_performance_times_field_performance_times_v;
$eventDate = DateTime::createFromFormat("Y-m-d H:i:s", $datetime, new DateTimeZone($user->timezone));
$performance_time = date_format($eventDate, "l, j F, Y, H:i");

Pero no cambia la zona horaria. ¿Alguna idea de qué está mal? Debería ser +2 horas en mi caso.

Respuestas

7 para la respuesta № 1

La fecha y hora de entrada está en UTC, no en la zona horaria del usuario. Por lo tanto, primero debe crear el objeto de fecha y hora en UTC, y luego establecer / cambiar la zona horaria a la del usuario:

$dt = new DateTime("2013-09-15 08:45:00", new DateTimeZone("UTC"));
print_r($dt);
/*
DateTime Object
(
[date] => 2013-09-15 08:45:00
[timezone_type] => 3
[timezone] => UTC
)
*/

Ahora tienes datetime en la zona horaria UTC. Si desea cambiar la zona horaria, simplemente llame ->setTimezone() en el objeto DateTime:

$dt->setTimezone(new DateTimeZone("Europe/Berlin"));
print_r($dt);
/*
DateTime Object
(
[date] => 2013-09-15 10:45:00
[timezone_type] => 3
[timezone] => Europe/Berlin
)
*/

PD. porque la entrada 2013-09-15 08:45:00 está en formato estándar de fecha y hora, no es necesario utilizar DateTime::createFromFormat.