Estoy tratando de convertir una fecha de yyyy-mm-dd
a dd-mm-yyyy
(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?
Estoy tratando de convertir una fecha de yyyy-mm-dd
a dd-mm-yyyy
(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?
Respuestas:
Uso strtotime()
y date()
:
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
(Consulte la documentación de tiempo de ejecución y fecha en el sitio PHP).
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 DateTime
clase para analizar y formatear :-)
Si desea evitar la conversión de tiempo de trabajo (por ejemplo, tiempo de trabajo 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 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), simplemente 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
?>
DateTime::createFromFormat()
- es realmente más útil questrtotime()
strtotime()
útil para convertir el formato de tipo verdadero (Ymd) a otros formatos, pero DateTime::createFromFormat()
es universal. Es como STR_TO_DATE
en MySQL
strtotime()
Utilizar:
implode('-', array_reverse(explode('-', $date)));
Sin la sobrecarga 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 antiguo formato de fecha.
$timestamp = strtotime(your date variable);
$new_date = date('d-m-Y', $timestamp);
Para más información, consulte la documentación destrtotime
.
O incluso más corto:
$new_date = date('d-m-Y', strtotime(your date variable));
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í :)
Nota : Debido a que la respuesta de esta publicación a veces recibe un voto positivo, regresé aquí para pedir amablemente a la gente que ya no la votara. Mi respuesta es antigua, no técnicamente correcta, y hay varios enfoques mejores aquí. Solo lo guardo aquí para fines históricos.
Aunque la documentación describe poco la función strtotime, @rjmunro abordó correctamente el problema en su comentario: está en formato ISO fecha "AAAA-MM-DD".
Además, aunque 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 realmente incorrecta!
El manual de tiempo de ejecución de PHP aquí establece 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 en los Estados Unidos, 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. Usar y modificar a voluntad. Si alguien convierte eso en una clase, me alegraría si eso 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
Hay 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');
Puedes probar la strftime()
función. Ejemplo simple:strftime($time, '%d %m %Y');
Use 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);
}
A continuación se muestra el código PHP para generar la fecha de mañana usando mktime()
y cambiar su formato a 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);
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
Para esta conversión específica también podemos usar una cadena de formato.
$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));
Obviamente, esto no funcionará para muchas otras conversiones de formato de fecha, pero dado que solo estamos reorganizando las subcadenas en este caso, esta es otra forma posible de hacerlo.
strtotime()
. :-)
function dateFormat($date) {
$m = preg_replace('/[^0-9]/', '', $date);
if (preg_match_all('/\d{2}+/', $m, $r)) {
$r = reset($r);
if ($r[2] <= 12 && $r[3] <= 31) return "$r[0]$r[1]-$r[2]-$r[3]";// Y-m-d
if ($r[0] <= 31 && $r[1] != 0 && $r[1] <= 12) return "$r[2]$r[3]-$r[1]-$r[0]";// d-m-Y
if ($r[0] <= 12 && $r[1] <= 31) return "$r[2]$r[3]-$r[0]-$r[1]";// m-d-Y
if ($r[2] <= 31 && $r[3] <= 12) return "$r[0]$r[1]-$r[3]-$r[2]";//Y-m-d
}
}
var_dump(dateFormat('31/01/2000')); // return 2000-01-31
var_dump(dateFormat('01-31-2000')); // return 2000-01-31
var_dump(dateFormat('2000-31-01')); // return 2000-01-31
var_dump(dateFormat('20003101')); // return 2000-01-31
Manera simple Uso strtotime()
y date()
:
$original_dateTime = "2019-05-11 17:02:07"; #This may be database datetime
$newDate = date("d-m-Y", strtotime($original_dateTime));
Con tiempo
$newDate = date("d-m-Y h:i:s a", strtotime($original_dateTime));
Uso date_create
ydate_format
Prueba esto.
function formatDate($input, $output){
$inputdate = date_create($input);
$output = date_format($inputdate, $output);
return $output;
}