Используя PHP 5.2.5, я работал с некоторыми объектами DateTime и заметил, что время кажется неправильным. Проблема, с которой я сталкиваюсь, может быть связана с часовыми поясами, но я не уверен - я создаю DateTime из метки времени Unix и получаю разные/неожиданные результаты в зависимости от того, как я его вывожу.
Я создал следующее, чтобы легко проиллюстрировать «проблему»:
$timezone = new DateTimeZone('America/Chicago');
$now = time();
$now_datetime = new DateTime('@' . $now, $timezone);
echo phpversion() . "\n\n";
echo $now . "\n";
echo $now_datetime->format('U') . "\n\n";
echo date('g:i:sa', $now) . "\n";
echo $now_datetime->format('g:i:sa') . "\n\n";
Это выводит следующее:
5.2.5
1287676530
1287676530
10:55:30am
3:55:30pm
В настоящее время я нахожусь в правильном часовом поясе, и сервер показывает «правильное» время (10:00) при использовании функции date()
для вывода форматированной даты, а также «Америка/Чикаго» является часовым поясом по умолчанию на этой машине. Но при выводе значений через DateTime::format()
времена совсем другие.
Я добавил ->format('U')
только для того, чтобы убедиться, что он содержит правильную метку времени.
Итак, я, вероятно, делаю что-то не так или у меня неправильные ожидания. Итак, что я упускаю?
Похоже, проблема с часовым поясом в DateTime, но если это так, то почему «сейчас» в Америке/Чикаго отображается как ... неправильно?