8

データベースから 2013-09-15 08:45:00 の形式で日付を取得しています。これは UTC で設定されており、別の動的タイムゾーン (ユーザーに基づく) に変更する必要があります。

これまでのところ、私は持っています

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

しかし、それはタイムゾーンを変更しません。何が問題なのですか?私の場合は+2時間です。

4

1 に答える 1

16

入力日時は、ユーザーのタイムゾーンではなく UTC です。したがって、最初に UTC で datetime オブジェクトを作成してから、タイムゾーンをユーザーの に設定/変更する必要があります。

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

これで、UTC タイムゾーンの datetime ができました。タイムゾーンを変更したい場合は->setTimezone()、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
)
*/

ps 入力2013-09-15 08:45:00は標準の日時形式であるため、使用する必要はありませんDateTime::createFromFormat

于 2013-09-15T16:58:09.790 に答える