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 № 1L'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
.