Вопрос

Я пытаюсь отобразить 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.

Есть какие-нибудь идеи, что происходит не так?

Это было полезно?

Решение

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

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

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

Другие советы

Используя Класс даты и времени доступно в 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';
}

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

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));
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top