Convertir formato de fecha aaaa-mm-dd => dd-mm-aaaa

Estoy tratando de convertir una fecha de aaaa-mm-dd a dd-mm-aaaa (pero no en SQL); sin embargo, no sé cómo la función de fecha requiere una marca de tiempo, y no puedo obtener una marca de tiempo de esta cadena.

¿Cómo es esto posible?

Use strtotime() y date() :

 $originalDate = "2010-03-21"; $newDate = date("dmY", strtotime($originalDate)); 

(ver strtotime y data docs en el sitio PHP).

Editar : tenga en cuenta que esta fue una solución rápida a la pregunta original. Para conversiones más extensas, realmente debería usar la clase DateTime para analizar y formatear 🙂

Si desea evitar la conversión de Strtotime (por ejemplo, strtotime no puede analizar su entrada), puede usar

 $myDateTime = DateTime::createFromFormat('Ym-d', $dateString); $newDateString = $myDateTime->format('dm-Y'); 

o equivalente:

 $newDateString = date_format(date_create_from_format('Ym-d', $dateString), 'dm-Y'); 

Primero le está dando el formato en el que está $ dateString. Luego le está diciendo el formato en el que desea que esté $ newDateString.

O si el formato fuente siempre es “Ymd” (aaaa-mm-dd), entonces solo use DateTime :

 format('dmY'); // 31.07.2012 echo $date->format('dm-Y'); // 31-07-2012 ?> 
 implode('-', array_reverse(explode('-', $date))); 

Sin gastos generales de conversión de fechas, no estoy seguro de que importe mucho.

 $newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate); 

Este código funciona para todos los formatos de fecha.

Puede cambiar el orden de las variables de reemplazo, como $ 3- $ 1- $ 2, debido a su formato de fecha anterior.

También otra posibilidad oscura:

 $oldDate = '2010-03-20' $arr = explode('-', $oldDate); $newDate = $arr[2].'-'.$arr[1].'-'.$arr[0]; 

No sé si lo usaría, pero aun así 🙂

 $timestamp = strtotime(your date variable); $new_date = date('dm-Y', $timestamp); 

Para más:

haga clic aquí

O incluso más corto:

 $new_date = date('dm-Y', strtotime(your date variable)); 

Editar: Debido a que la respuesta de este post a veces se sube, volví aquí para pedir amablemente a las personas que ya no lo vuelvan a votar. Mi respuesta es antigua, no es técnicamente correcta, y hay varios enfoques mejores aquí. Solo lo estoy guardando aquí para propósitos históricos.

Aunque la documentación describe pobremente la función strtotime, @rjmunro abordó correctamente el problema en su comentario: está en la fecha del formato ISO “AAAA-MM-DD”.

Además, aunque mi función Date_Converter aún funcione, me gustaría advertir que puede haber declaraciones imprecisas a continuación, así que ignórelas.

¡La respuesta más votada es realmente incorrecta!

El Manual de tiempo de PHP aquí indica que “la función espera recibir una cadena que contenga un formato de fecha en inglés”. Lo que realmente significa es que espera un formato de fecha estadounidense estadounidense, como “mdY” o “m / d / Y”.

Eso significa que una fecha provista como “Ymd” puede ser malinterpretada por strtotime. Debe proporcionar la fecha en el formato esperado.

Escribí una pequeña función para devolver las fechas en varios formatos. Use y modifique como desee. Si alguien lo convierte en una Clase, me alegraría que eso se comparta.

 function Date_Converter($date, $locale = "br") { # Exception if (is_null($date)) $date = date("m/d/YH:i:s"); # Let's go ahead and get a string date in case we've been given a Unix Time Stamp if ($locale == "unix") $date = date("m/d/YH:i:s", $date); # Separate Date from Time $date = explode(" ", $date); if ($locale == "br") { # Separate d/m/Y from Date $date[0] = explode("/", $date[0]); # Rearrange Date into m/d/Y $date[0] = $date[0][1] . "/" . $date[0][0] . "/" . $date[0][2]; } # Return date in all formats # US $Return["datetime"]["us"] = implode(" ", $date); $Return["date"]["us"] = $date[0]; # Universal $Return["time"] = $date[1]; $Return["unix_datetime"] = strtotime($Return["datetime"]["us"]); $Return["unix_date"] = strtotime($Return["date"]["us"]); $Return["getdate"] = getdate($Return["unix_datetime"]); # BR $Return["datetime"]["br"] = date("d/m/YH:i:s", $Return["unix_datetime"]); $Return["date"]["br"] = date("d/m/Y", $Return["unix_date"]); # Return return $Return; } # End Function 

dos formas de implementar esto

 1) $date = strtotime(date); $new_date = date('dm-Y', $date); 

2)

 $cls_date = new DateTime($date); echo $cls_date->format('dm-Y'); 

Puedes probar la función strftime . Algo así como strftime($time, '%d %m %Y');

A continuación se muestra el código PHP para generar la fecha de mañana usando mktime() y cambiar su formato a formato dd / mm / aaaa y luego imprimirlo usando echo .

 $tomorrow = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")); echo date("d", $tomorrow) . "/" . date("m", $tomorrow). "/" . date("Y", $tomorrow); 

Utilice esta función para convertir de cualquier formato a cualquier formato

 function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Ym-d') { $date_aux = date_create_from_format($from_format, $date); return date_format($date_aux,$to_format); } 
 date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));