¿Hay una manera simple 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 devolver una fecha actual en lugar de la madrugada. ¿Qué estoy haciendo mal?
Respuestas:
El segundo parámetro
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 usar strtotime () para convertir una cadena de fecha en una marca de tiempo. Sin embargo, incluso strtotime () no reconoce el
y-m-d-h-i-s
formato.PHP 5.3 y superior
Uso
DateTime::createFromFormat
. Le permite especificar una máscara exacta, utilizando ladate()
sintaxis, para analizar las fechas de cadena entrantes con.PHP 5.2 y versiones inferiores
Deberá analizar los elementos (año, mes, día, hora, minuto, segundo) de forma manual utilizando
substr()
y entregar los resultados a mktime () que le generará una marca de tiempo.¡Pero eso es mucho trabajo! Recomiendo usar un formato diferente que strftime () pueda entender. strftime () entiende cualquier entrada de fecha por debajo de
the next time joe will slip on the ice
. por ejemplo, esto funciona:fuente
DateTime
existe desde PHP 5.2 en el núcleo de PHP yDateTime
se puede habilitar el soporte experimental para PHP 5.1 en la compilación. secure.php.net/manual/en/datetime.installation.phpLa forma más fácil de hacer esto es
Primero le está dando el formato en el que está $ dateString. Luego le está diciendo el formato en el que desea que esté $ newDateString.
Esto también evita el uso de strtotime, que a veces puede ser difícil de trabajar.
Si no se está transformando de un formato de fecha a otro, pero solo quiere la fecha actual (o fecha y hora) en un formato específico, entonces es aún más fácil:
Esta otra pregunta también se refiere al mismo tema: Convertir formato de fecha aaaa-mm-dd => dd-mm-aaaa .
fuente
$timestring = $now->format('Y-m-d h:i:s');
¿seguramente?m
por meses,i
por minutosLos basicos
La forma más simple de convertir un formato de fecha a otro es usar
strtotime()
condate()
.strtotime()
convertirá la fecha en una marca de tiempo de Unix . Esa marca de tiempo de Unix se puede pasardate()
para convertirla al nuevo formato.O como una frase:
Tenga en cuenta que
strtotime()
requiere que la fecha esté en un formato válido . Si no se proporciona un formato válido, sestrtotime()
devolverá falso, lo que hará que su fecha sea 1969-12-31.Utilizando
DateTime()
A partir de PHP 5.2, PHP ofreció la
DateTime()
clase que nos ofrece herramientas más potentes para trabajar con fechas (y horas). Podemos reescribir el código anterior usandoDateTime()
así:Trabajando con marcas de tiempo Unix
date()
toma una marca de tiempo Unix como su segundo parámetro y le devuelve una fecha formateada:DateTime () funciona con las marcas de tiempo de Unix agregando un
@
antes de la marca de tiempo:Si la marca de tiempo que tiene está en milisegundos (puede terminar
000
y / o la marca de tiempo tiene trece caracteres), deberá convertirla a segundos antes de poder convertirla a otro formato. Hay dos formas de hacer esto:substr()
Recortar los últimos tres dígitos se puede lograr de varias maneras, pero usar
substr()
es el más fácil:También puede convertir la marca de tiempo en segundos dividiéndola entre 1000. Debido a que la marca de tiempo es demasiado grande para que los sistemas de 32 bits hagan cálculos matemáticos, deberá usar la biblioteca BCMath para hacer los cálculos matemáticos como cadenas:
Para obtener una marca de tiempo Unix, puede usar la
strtotime()
que devuelve una marca de tiempo Unix:Con DateTime () puedes usar
DateTime::getTimestamp()
Si está ejecutando PHP 5.2, puede usar la
U
opción de formato en su lugar:Trabajar con formatos de fecha no estándar y ambiguos
Desafortunadamente, no todas las fechas con las que un desarrollador tiene que trabajar están en un formato estándar. Afortunadamente, PHP 5.3 nos proporcionó una solución para eso.
DateTime::createFromFormat()
nos permite decirle a PHP en qué formato se encuentra una cadena de fecha para que pueda analizarse con éxito en un objeto DateTime para su posterior manipulación.En PHP 5.4 obtuvimos la capacidad de hacer que los miembros de la clase accedan a instancias que se agregaron, lo que nos permite convertir nuestro
DateTime()
código en una línea:fuente
Prueba esto:
fuente
Para convertir
$date
dedd-mm-yyyy hh:mm:ss
a una fecha y hora adecuada de MySQL voy así:fuente
Fatal error: Call to a member function format() on a non-object
. Sólo un aviso!El siguiente es un método fácil para convertir fechas a diferentes formatos.
fuente
estás haciendo mal aquí, esto debería ser
separador de tiempo es ':'
Creo que esto ayudará...
O
fuente
Esta forma nativa ayudará a convertir cualquier formato ingresado al formato deseado.
fuente
Debe convertir $ old_date nuevamente en una marca de tiempo, ya que la función de fecha requiere una marca de tiempo como segundo argumento.
fuente
strtotime lo resolverá. las fechas no son las mismas y todas están en formato estadounidense.
fuente
Prueba esto:
fuente
Esto me resolvió
Salida: 2018-04-18
fuente
Esta es la otra forma en que puede convertir el formato de fecha
fuente
Solo usando cadenas, para mí es una buena solución, menos problemas con mysql. Detecta el formato actual y lo cambia si es necesario, esta solución es solo para formato español / francés e inglés, sin usar la función de fecha y hora de php.
UTILIZAR
fuente
Sé que esto es antiguo, pero, al encontrarme con un proveedor que utiliza inconsistentemente 5 formatos de fecha diferentes en sus API (y servidores de prueba con una variedad de versiones de PHP desde los 5 hasta los últimos 7), decidí escribir un convertidor universal que funciona con una miríada de versiones de PHP.
Este convertidor tomará prácticamente cualquier entrada, incluido cualquier formato estándar de fecha y hora (incluso con o sin milisegundos) y cualquier representación de Epoch Time (incluso con o sin milisegundos) y lo convertirá a prácticamente cualquier otro formato.
Para llamarlo:
Enviar nulo para el formato hará que la función devuelva la fecha y hora en Epoch / Unix Time. De lo contrario, envíe cualquier cadena de formato que date () admita, así como con ".u" durante milisegundos (también manejo milisegundos, aunque date () devuelve ceros).
Aquí está el código:
Aquí hay algunas llamadas de muestra: notará que también maneja los datos de la zona horaria (aunque, como se señaló anteriormente, cualquier hora no GMT se devuelve en su zona horaria).
Aquí está la salida:
Lo único que no está en esta versión es la capacidad de seleccionar la zona horaria en la que desea que esté la fecha y hora devuelta. Originalmente, escribí esto para cambiar cualquier fecha y hora a Epoch Time, por lo que no necesitaba soporte de zona horaria. Sin embargo, es trivial agregar.
fuente