DateTime
не принимает метку времени UNIX в качестве первого аргумента конструктора.Вместо этого он ожидает строку, подобную той, которая вставлена в strtotime()
.Таким образом, ваш код должен выглядеть следующим образом:
$objTimeZone = new DateTimezone("Europe/London");
// ...
$objDateTo = new DateTime("2011-05-04 19:30:00 - 24 hour");
$objDateTo->setTimezone($objTimeZone);
$date_to = $objDateTo->format('c');
Чтобы использовать DateTime
с отметкой времени, вы должны предшествовать отметке времени с @
:
$ts = time();
$dt = new DateTime('@'.$ts);
Кстати: Вы должны быть осторожны с тем, как вы создаете объект DateTime
и применяете часовой пояс.Вы создаете объект DateTime
в часовом поясе по умолчанию (который устанавливается с помощью php.ini
или date_default_timezone_set()
. Затем вы применяете часовой пояс Europe/London
к этомуDateTime
объект, который на самом деле: принимает момент времени 2011-05-04 19:30:00 - 24 hour
в моем сконфигурированном часовом поясе по умолчанию, и мы затем хотим узнать, во сколько этот момент времени находится в Europe/London
часовом поясе. Естьнет разницы, если вы настроили часовой пояс на самом деле Europe/London
, но это может быть разница, если часовые пояса отличаются.
РЕДАКТИРОВАТЬ (для примера)
Ваша системанастроен с часовым поясом по умолчанию UTC
.
$date1 = new DateTime(); // the null doesn't matter
// $date1 now contains approx. 2011-03-18T15:03:58+00:00
$date1->setTimezone(new DateTimezone('Europe/London');
// $date1 doesn't change because UTC is the same as Europe/London for the given date
$date1->setTimezone(new DateTimezone('Europe/Berlin');
// in Germany the same point in time is 2011-03-18T16:03:58+01:00
Пока проблем нет. Давайте возьмем ваше второе свидание.
$date2 = new DateTime("2011-05-04 19:30:00 - 24 hour");
// $date2 now contains 2011-05-03T19:30:00+00:00
$date2->setTimezone(new DateTimezone('Europe/London');
// $date2 now changes to 2011-05-03T20:30:00+01:00 because Europe/London moves to DST on March 27th
$date2->setTimezone(new DateTimezone('Europe/Berlin');
// that's 2011-05-03T21:30:00+02:00 in Germany
Мотыга, которая немного его очищает.