Intereting Posts
Как отображать данные из базы данных? Как ограничить просмотр файлов в каталоге WordPress помогает с выбором сообщений с query_post GET весь div с его элементами и отправить его с помощью функции php mail Ошибка: файл зашифрован или не является базой данных как передать пользовательские поля в $ _POST или $ _GET в окне CKEdtior Upload? Как заполнить список динамических навигационных меню, следуя моим структурам таблиц, используя php (codeigniter) и mysql Почему PHP преобразовывает String в Integer? Yii – удалить 'index' из URL Добавить новый транспортный драйвер в Laravel's Mailer PHP Динамическое создание KML для нескольких меток на карте Как вызвать пользовательские java-методы из PHP? Как я могу получить одну фотографию для каждого тега Flickr определенным пользователем по одному запросу? Невозможно запустить fpm с помощью phpbrew на Ubuntu Как добавить категорию в Magento через сценарий установки?

Как отображать дату как формат iso 8601 с помощью PHP

Я пытаюсь отобразить datetime из моей базы данных MySQL как сформированную строку iso 8601 с PHP, но это выходит неправильно.

17 октября 2008 года выходит как: 1969-12-31T18: 33: 28-06: 00, что явно неверно (год должен быть не в 1969 году)

Это код, который я использую:

<?= date("c", $post[3]) ?> 

$post[3] is the datetime (CURRENT_TIMESTAMP) из моей базы данных MySQL.

Любые идеи, что происходит не так?

Второй аргумент date – это временная метка UNIX, а не строка временной метки базы данных.

Вам нужно преобразовать временную метку вашей базы данных с помощью strtotime .

 <?= date("c", strtotime($post[3])) ?> 

Используя класс DateTime, доступный в PHP версии 5.2, он будет выполнен следующим образом:

 $datetime = new DateTime('17 Oct 2008'); echo $datetime->format('c'); 

Смотрите это в действии

Начиная с PHP 5.4 вы можете сделать это как однострочный:

 echo (new DateTime('17 Oct 2008'))->format('c'); 

Процедурный стиль:

 echo date_format(date_create('17 Oct 2008'), 'c'); // Output : 2008-10-17T00:00:00+02:00 

Объектно-ориентированный стиль:

 $formatteddate = new DateTime('17 Oct 2008'); echo $datetime->format('c'); // Output : 2008-10-17T00:00:00+02:00 

Гибрид 1:

 echo date_format(new DateTime('17 Oct 2008'), 'c'); // Output : 2008-10-17T00:00:00+02:00 

Гибрид 2:

 echo date_create('17 Oct 2008')->format('c'); // Output : 2008-10-17T00:00:00+02:00 

Заметки :

1) Вы также можете использовать 'Ymd\TH:i:sP' в качестве альтернативы 'c' для вашего формата.

2) Часовой пояс по умолчанию для вашего ввода – это часовой пояс вашего сервера. Если вы хотите, чтобы входной сигнал находился в другом часовом поясе, вам необходимо явно указать часовой пояс. Это также повлияет на ваш результат:

 echo date_format(date_create('17 Oct 2008 +0800'), 'c'); // Output : 2008-10-17T00:00:00+08:00 

3) Если вы хотите, чтобы выход был для часового пояса, отличного от того, который был на вашем входе, вы можете явно указать свой часовой пояс:

 echo date_format(date_create('17 Oct 2008')->setTimezone(new DateTimeZone('America/New_York')), 'c'); // Output : 2008-10-16T18:00:00-04:00 

Для pre PHP 5:

 function iso8601($time=false) { if(!$time) $time=time(); return date("Ymd", $time) . 'T' . date("H:i:s", $time) .'+00:00'; } 

Вот хорошая функция для pre PHP 5: я добавил разницу GMT в конце, она не жестко закодирована.

 function iso8601($time=false) { if ($time === false) $time = time(); $date = date('Ymd\TH:i:sO', $time); return (substr($date, 0, strlen($date)-2).':'.substr($date, -2)); }