Cómo mostrar una fecha como el formato ISO 8601 con PHP
-
05-09-2019 - |
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?
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');
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));
}