/ / Modifica del fuso orario di una data recuperata in php - php, data, datetime, drupal

Modifica del fuso orario di una data recuperata in php-php, data, datetime, drupal

Sto recuperando una data nel formato 2013-09-15 08:45:00 dal database, che è impostato in UTC e ho bisogno di cambiarlo in un altro fuso orario dinamico (basato sull'utente)

Finora ce l'ho

$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");

Ma non cambia il fuso orario. Qualche idea su cosa c'è che non va? Dovrebbe essere +2 ore nel mio caso.

risposte:

7 per risposta № 1

L'input datetime è in UTC, non nel fuso orario dell'utente. Quindi prima devi creare l'oggetto datetime in UTC e quindi impostare / cambiare fuso orario in user "s:

$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
)
*/

Ora hai datetime nel fuso orario UTC. Se desideri cambiare il fuso orario, chiama ->setTimezone() su oggetto 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
)
*/

post scriptum perché input 2013-09-15 08:45:00 è in formato datetime standard, non è necessario utilizzare DateTime::createFromFormat.