php - pone - Convertir formato de fecha aaaa-mm-dd=> dd-mm-aaaa
formato fecha excel (12)
Estoy intentando 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 hora, y no puedo obtener una marca de hora de esta cadena.
¿Cómo es esto posible?
Edit: Debido a que la respuesta de esta publicación a veces es upvote, regresé aquí para pedirles a las personas que no lo voten más. 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 mal la función strtotime, @rjmunro abordó correctamente el problema en su comentario: está en la fecha de formato ISO "YYYY-MM-DD".
Además, a pesar de que mi función Date_Converter podría seguir funcionando, me gustaría advertir que puede haber declaraciones imprecisas a continuación, así que no las tenga en cuenta.
¡La respuesta más votada es en realidad incorrecta!
PHP strtotime Manual here dice que "la función espera recibir una cadena con un formato de fecha en inglés". Lo que realmente significa es que espera un formato de fecha estadounidense en los EE. UU., Como "mdY" o "m / d / Y".
Eso significa que una fecha proporcionada como "Ymd" puede ser mal interpretada por strtotime. Debe proporcionar la fecha en el formato esperado.
Escribí una pequeña función para devolver fechas en varios formatos. Utilizar y modificar a voluntad. Si alguien convierte eso en una clase, me alegraría que se compartiera.
function Date_Converter($date, $locale = "br") {
# Exception
if (is_null($date))
$date = date("m/d/Y H: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/Y H: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/Y H:i:s", $Return["unix_datetime"]);
$Return["date"]["br"] = date("d/m/Y", $Return["unix_date"]);
# Return
return $Return;
} # End Function
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 con echo
.
$tomorrow = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));
echo date("d", $tomorrow) . "/" . date("m", $tomorrow). "/" . date("Y", $tomorrow);
Puedes probar la función strftime
. Algo como strftime($time, ''%d %m %Y'');
Si desea evitar la conversión de strtotime (por ejemplo, strtotime no puede analizar su entrada) puede usar,
$myDateTime = DateTime::createFromFormat(''Y-m-d'', $dateString);
$newDateString = $myDateTime->format(''d-m-Y'');
o equivalente:
$newDateString = date_format(date_create_from_format(''Y-m-d'', $dateString), ''d-m-Y'');
Primero le está dando el formato en el que se encuentra $ dateString. Luego le está diciendo el formato en el que desea que $ newDateString esté en.
O si el formato de origen siempre es "Ymd" (aaaa-mm-dd), entonces use DateTime :
<?php
$source = ''2012-07-31'';
$date = new DateTime($source);
echo $date->format(''d.m.Y''); // 31.07.2012
echo $date->format(''d-m-Y''); // 31-07-2012
?>
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 aún así :)
Utilice esta función para convertir de cualquier formato a cualquier formato
function reformatDate($date, $from_format = ''d/m/Y'', $to_format = ''Y-m-d'') {
$date_aux = date_create_from_format($from_format, $date);
return date_format($date_aux,$to_format);
}
dos formas de implementar esto
1)
$date = strtotime(date);
$new_date = date(''d-m-Y'', $date);
2)
$cls_date = new DateTime($date);
echo $cls_date->format(''d-m-Y'');
Usa strtotime()
y date()
:
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
(Consulte los documentos de date y strtotime en el sitio de PHP).
Edición : 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 :-)
$newDate = preg_replace("/(/d+)/D+(/d+)/D+(/d+)/","$3-$2-$1",$originalDate);
Este código funciona para cada formato de fecha.
Puede cambiar el orden de las variables de reemplazo como $ 3- $ 1- $ 2 debido a su antiguo formato de fecha.
$timestamp = strtotime(your date variable);
$new_date = date(''d-m-Y'', $timestamp);
Para más:
haga clic here
O incluso más corto:
$new_date = date(''d-m-Y'', strtotime(your date variable));
date(''m/d/Y h:i:s a'',strtotime($val[''EventDateTime'']));
implode(''-'', array_reverse(explode(''-'', $date)));
Sin gastos de conversión de fecha, no estoy seguro de que va a importar mucho.