Я имею в виду это: Преобразование формата ISO 8601 в d M Y в PHP
Я попробовал это так же, как это: echo date("d M Y H:i:s", strtotime($time));
Но время не отображается как сохраненное в базе данных. Это показывает разницу в несколько часов.
База данных имеет: 2016-03-20T23: 30: 51 + 00: 00
С вышеупомянутым php echo я получаю: 21 марта 2016 00:30:51
Где как должно быть 20 марта 2016 года 23:30:51
Приведенный выше пример показывает дополнительно 1 час у?
Я пытался использовать этот формат для отображения часа & минута, но показанное время неверно. Дисплей времени имеет разницу в несколько часов. Почему это так?
Ваш формат даты 2016-03-20T23:30:51+00:00
показывает GMT DateTime (примечание: та же самая TimeZone, которая используется временными метками php / unix).
Поэтому, когда вы пишете:
echo date( "d M Y H:i:s", strtotime( $time ) );
Вы получаете еще правильную дату, конвертированную в вашей системе TimeZone.
Ты можешь использовать DateTime
класс для выполнения большего количества операций с датами:
$date = new DateTime( $time );
echo $date->format("d M Y H:i:s");
напечатает дату в оригинальном (GMT) формате.
$date->setTimezone( new DateTimeZone('Europe/Berlin') );
echo $date->format("d M Y H:i:s");
напечатает дату в часовом поясе «Европа / Берлин».
Примечание: сохранение даты в ISO 8601 UTC / GTM на самом деле лучший выбор.
Ваша система использует свой часовой пояс вместо UTC, тогда как база данных находится в UTC. Если вы хотите отобразить в UTC, вы можете использовать http://php.net/manual/en/function.date-default-timezone-set.php установить часовой пояс в UTC перед вызовом strtotime и даты.