Я пытаюсь отобразить 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
echo date_format(new DateTime('17 Oct 2008'), 'c'); // Output : 2008-10-17T00:00:00+02:00
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)); }