Как отобразить дату в формате iso 8601 с PHP
Я пытаюсь отобразить datetime из моей базы данных MySQL как формированную строку iso 8601 с PHP, но это выходит неправильно.
17 октября 2008 выходит как: 1969-12-31T18: 33: 28-06: 00, что явно не правильно (год должен быть 2008 не 1969)
это код, который я использую:
<?= date("c", $post[3]) ?>
$post[3] is the datetime (CURRENT_TIMESTAMP)
из моей базы данных MySQL.
есть идеи, что происходит не так?
5 ответов
С помощью класс 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) вы также можете использовать 'Y-m-d\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("Y-m-d", $time) . 'T' . date("H:i:s", $time) .'+00:00';
}
вот хорошая функция для pre PHP 5: Я добавил разницу GMT в конце, это не жестко закодировано.
function iso8601($time=false) {
if ($time === false) $time = time();
$date = date('Y-m-d\TH:i:sO', $time);
return (substr($date, 0, strlen($date)-2).':'.substr($date, -2));
}