obtener now formato fecha español actual php mysql date date-format time-format

now - Cómo mostrar una fecha como formato iso 8601 con PHP



string to date php (5)

Estilo de procedimiento:

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

Híbrido 2:

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

Notas:

1) También puede usar ''Ymd/TH:i:sP'' como alternativa a ''c'' para su formato.

2) La zona horaria predeterminada de su entrada es la zona horaria de su servidor. Si desea que la entrada sea para un huso horario diferente, debe configurar su zona horaria de manera explícita. Sin embargo, esto también afectará su producción:

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 para una zona horaria diferente a la de su entrada, puede establecer su zona horaria explícitamente:

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

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

El 17 de octubre de 2008 sale como: 1969-12-31T18: 33: 28-06: 00, lo que claramente no es correcto (el año debería ser 2008, no 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?


Aquí está la buena función para pre PHP 5: agregué la diferencia GMT al final, no está codificada.

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)); }


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

Necesita convertir su marca de tiempo de base de datos con strtotime .

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


Para 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''; }


Usando la clase DateTime disponible en PHP versión 5.2 se haría así:

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

Véalo en acción

A partir de PHP 5.4, puedes hacer esto como una línea:

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