Отображение фактического времени с помощью ISO 8601

Я имею в виду это: Преобразование формата 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 час у?
Я пытался использовать этот формат для отображения часа & минута, но показанное время неверно. Дисплей времени имеет разницу в несколько часов. Почему это так?

3

Решение

Ваш формат даты 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 на самом деле лучший выбор.


2

Другие решения

Ваша система использует свой часовой пояс вместо UTC, тогда как база данных находится в UTC. Если вы хотите отобразить в UTC, вы можете использовать http://php.net/manual/en/function.date-default-timezone-set.php установить часовой пояс в UTC перед вызовом strtotime и даты.

1

По вопросам рекламы [email protected]