Pregunta

Estoy tratando de mostrar una fecha y hora de mi base de datos MySQL como una cadena con formato ISO 8601 con PHP pero está saliendo mal.

17 Oct 2008 está saliendo como: 1969-12-31T18: 33: 28-06: 00 que claramente no es correcta (el año 2008 no debería ser 1969)

Este es el código que estoy usando:

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

$post[3] is the datetime (CURRENT_TIMESTAMP) de mi base de datos MySQL.

Alguna idea de lo que va mal?

¿Fue útil?

Solución

El segundo argumento de date es una marca de tiempo UNIX, no es una cadena de marca de tiempo base de datos.

Es necesario para convertir su base de datos con marca de tiempo strtotime .

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

Otros consejos

Uso de la clase DateTime href="http://www.php.net/manual/en/book.datetime.php"> disponible en la versión de PHP 5.2 se haría así:

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

verlo en acción

A partir de PHP 5.4 se puede hacer esto como una sola línea:

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

Estilo por procedimientos:

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

estilo orientado a objetos:

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

híbrido 1:

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

Hybrid 2:

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

Notas:

1) También es posible usar 'Y-m-d\TH:i:sP' como una alternativa a 'c' para su formato.

2) La zona horaria predeterminada de la entrada es la zona horaria de su servidor. Si desea que la entrada sea para una zona horaria diferente, es necesario establecer la zona horaria de forma explícita. Esto también afectará a su salida, sin embargo:

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

3) Si desea que la salida sea de una zona horaria diferente a la de su entrada, puede configurar la zona horaria de forma explícita:

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

Para PHP pre 5:

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

Esta es la buena función para PHP pre 5: Añadí diferencia GMT, al final, no es codificado.

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));
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top