Convertir un formato de fecha en otro en PHP

¿Existe una forma sencilla de convertir un formato de fecha en otro formato de fecha en PHP?

Tengo esto:

$old_date = date('y-m-d-h-i-s');            // works

$middle = strtotime($old_date);             // returns bool(false)

$new_date = date('Y-m-d H:i:s', $middle);   // returns 1970-01-01 00:00:00

Pero, por supuesto, me gustaría que devolviera una fecha actual en lugar de la grieta 'o el amanecer. ¿Qué estoy haciendo mal?

Solución

El segundo parámetro de date() debe ser una marca de tiempo adecuada (segundos desde el 1 de enero de 1970). Está pasando una cadena, que date() no puede reconocer.

Puede utilizar strtotime() para convertir una cadena de fecha en una marca de tiempo. Sin embargo, incluso strtotime() no reconoce el formato y-m-d-h-i-s.

PHP 5.3 y superior

Utilice DateTime::createFromFormat. Le permite especificar una máscara exacta - usando la sintaxis date() - para analizar las fechas de cadena entrantes.

PHP 5.2 e inferior

Tendrá que analizar los elementos (año, mes, día, hora, minuto, segundo) manualmente usando substr() y entregar los resultados a mktime() que le construirá una marca de tiempo.

Pero eso'¡es mucho trabajo! Recomiendo usar un formato diferente que strftime() pueda entender. strftime() entiende cualquier entrada de fecha que no sea la próxima vez que Joe resbale en el hielo. por ejemplo, esto funciona:

$old_date = date('l, F d y h:i:s');              // returns Saturday, January 30 10 02:06:34
$old_date_timestamp = strtotime($old_date);
$new_date = date('Y-m-d H:i:s', $old_date_timestamp);   
Comentarios (4)

Prueba esto:

$old_date = date('y-m-d-h-i-s');
$new_date = date('Y-m-d H:i:s', strtotime($old_date));
Comentarios (3)

Tienes que volver a convertir $old_date en una marca de tiempo, ya que la función date requiere una marca de tiempo como segundo argumento.

Comentarios (0)