Это явно проблема с часовым поясом, как видно из «+00: 00» против «+01: 00».
Вы также можете проверить это, установив часовой пояс по умолчанию перед с date_default_timezone_set
date_default_timezone_set("UTC");
2016-01-01T01: 01: 01 + 00: 00
См eval.in - UTC
-
date_default_timezone_set("Europe/Berlin");
2016-01-01T02: 01: 01 + 01: 00
См eval.in - Berlin
Вы также можете узнать о локальном часовом поясе с date_default_timezone_get
echo date_default_timezone_get();
eval.in - local timezone
UTC
Что также объясняет, почему http://eval.in
показывает ожидаемый выход.
Конечно, вы можете установить часовой пояс на DateTime
объекта индивидуально
$ts = 1451610061;
$dt = new DateTime("@$ts");
$utc = new DateTimeZone("UTC");
$dt->setTimezone($utc);
echo "UTC=", $dt->format('c'), "\n";
$berlin = new DateTimeZone("Europe/Berlin");
$dt->setTimezone($berlin);
echo "Berlin=", $dt->format('c'), "\n";
Это покажет
UTC = 2016-01-01T01: 01: 01 + 00: 00
Berlin = 2016-01-01T02: 01: 01 + 01: 00
eval.in - setTimezone
Чтобы, наконец, ответить на ваш вопрос: нет ничего плохого в вашем коде. 2016-01-01T02:01:01+01:00
- это абсолютно достоверное представление этой метки времени в соответствии с ISO 8601 - Wikipedia.
Согласно сайту [this] (http://www.onlineconversion.com/unix_time.htm), '1451610061' приводит к' Fri, 01 Jan 2016 01:01:01 GMT', поэтому его проблема с сервером.Возможно, добавьте 'timezone' в' datetime'. – Xorifelse
Здесь тоже хорошо работает https://eval.in/725142 –