Realmente me gusta la strtotime()
función, pero el manual del usuario no proporciona una descripción completa de los formatos de fecha admitidos. strtotime('dd/mm/YYYY')
no funciona, solo funciona con mm/dd/YYYY
formato.
Si tengo la fecha en dd/mm/YYYY
formato, ¿cómo puedo convertirla YYYY-mm-dd
? Puedo hacerlo usando la explode()
función, pero creo que hay mejores soluciones.
str_replace('/', '-', $date);
Respuestas:
Aquí está la solución simplificada:
Resultado:
La
strtotime
documentación dice:fuente
echo date('Y-m-l', strtotime('01-01-2010'));
El resultado es2010-01-Friday
. Entonces, el día que viene al final, depende de cómo especifique el formato de fecha para ladate
función.$date = '25/05/2010'; $date = str_replace('/', '-', $date);
la línea adicional no es necesaria para resolver su problema.Puede analizar fechas desde un formato personalizado (a partir de PHP 5.3) con DateTime :: createFromFormat
(Aparte:
!
se utiliza para restablecer valores no especificados a la marca de tiempo de Unix, es decir, la hora será la medianoche).Si no desea (o no puede) usar PHP 5.3, en la página del manual Formatos de fecha se incluye una lista completa de los formatos de fecha / hora disponibles que acepta strtotime . Esa página se describen más a fondo el hecho de que
m/d/Y
se infiere másd/m/Y
(pero se puede, como se menciona en las respuestas aquí, el usod-m-Y
,d.m.Y
od\tm\tY
).En el pasado, también recurrí a la rápida
str_replace
mencionada en otra respuesta, así como a analizar la cadena de fecha en otro formato comofuente
Esta es una buena solución para muchos problemas:
fuente
De la nota de escritura de STRTOTIME:
Las fechas en los formatos m / d / y o dmy se desambiguan al observar el separador entre los diversos componentes: si el separador es una barra oblicua (/), entonces se supone el m / d / y estadounidense; mientras que si el separador es un guión (-) o un punto (.), entonces se supone el formato dmy europeo.
Es tan simple como eso.
fuente
$t
y$t1
muestran un resultado diferente. Lo comprobé así.$t=strtotime(date('d-m-Y'));
y$t1=strtotime(date('m/d/Y'));
más rápido probablemente debería ser
esto devolverá falso si el formato no se ve como el correcto, pero no verificará si la fecha es válida
fuente
No he encontrado una mejor solución. Se puede utilizar
explode()
,preg_match_all()
etc.Tengo una función auxiliar estática como esta
Probablemente haya un mejor nombre para eso, pero lo uso
ausStrToTime()
porque funciona con fechas australianas (que a menudo trato con ser australiano). Un nombre mejor probablemente sería el nombre estandarizado, pero no estoy seguro de qué es.fuente
Traté de convertir el formato ddmmyy a
date("Y-m-d"
formato pero no estaba funcionando cuando paso directamenteddmmyy =date('dmy')
entonces me di cuenta de que tiene que estar en formato aaaa-mm-dd así. subcadena utilizada para organizar
luego pasó a
date("Y-m-d",strtotime($strParam));
¡funcionó!
fuente
$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');
Esto funcionará para ti. Convierte la Cadena en un formato de fecha personalizado donde puede especificar a PHP cuál es el formato original de la Cadena que se le ha dado. Ahora que es un formato de fecha, puede convertirlo al formato de fecha predeterminado de PHP, que es el mismo que utiliza MySQL.
fuente
¿Obtiene este valor de una base de datos? Si es así, considere formatearlo en la base de datos (use
date_format
en mysql, por ejemplo). De lo contrario, explotar el valor puede ser la mejor opción, ya que el tiempo de ejecución simplemente no parece apreciar los valores dd / mm / aaaa.fuente
Si sabe que está en dd / mm / AAAA, puede hacer:
Coincidirá con las fechas en la forma d / m / AA o dd / mm / AAAA (o cualquier combinación de ambas) ...
Si desea admitir más separadores que solo /, puede cambiar la expresión regular a:
Y luego agregue los caracteres que desee en el
[/-]
bit (Nota: el carácter - debe ser el último)fuente
\d
para dígitos decimales en lugar de[/d]
para barra diagonal o carácter d .Esta solución es más simple y más elegante que explotar:
No tiene que saber en qué formato está obteniendo la fecha, pero si viene con barras inclinadas, se reemplazan con puntos y se trata como europeo durante el tiempo de ejecución.
fuente
La solución más simple es esta:
fuente
Esta es la solución que estoy usando incluso si el cero inicial está ahí.
fuente
$ date_info = '20 / 02/2019 '; echo date ('Ym-d', strtotime (str_replace ('/', '-', $ date_info)));
fuente
Tan simple como esto
fuente