Los basicos
La forma más simple de convertir un formato de fecha a otro es usar strtotime()
con date()
. strtotime()
convertirá la fecha en una marca de tiempo de Unix . Esa marca de tiempo de Unix se puede pasar date()
para convertirla al nuevo formato.
$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);
O como una frase:
$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));
Tenga en cuenta que strtotime()
requiere que la fecha esté en un formato válido . Si no se proporciona un formato válido, se strtotime()
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 usando DateTime()
así:
$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');
Trabajando con marcas de tiempo Unix
date()
toma una marca de tiempo Unix como su segundo parámetro y le devuelve una fecha formateada:
$new_date_format = date('Y-m-d H:i:s', '1234567890');
DateTime () funciona con las marcas de tiempo de Unix agregando un @
antes de la marca de tiempo:
$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');
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:
- Recorte los últimos tres dígitos usando
substr()
Recortar los últimos tres dígitos se puede lograr de varias maneras, pero usar substr()
es el más fácil:
$timestamp = substr('1234567899000', -3);
- Divide el substr por 1000
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:
$timestamp = bcdiv('1234567899000', '1000');
Para obtener una marca de tiempo Unix, puede usar la strtotime()
que devuelve una marca de tiempo Unix:
$timestamp = strtotime('1973-04-18');
Con DateTime () puedes usar DateTime::getTimestamp()
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();
Si está ejecutando PHP 5.2, puede usar la U
opción de formato en su lugar:
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');
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.
$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = $date->format('Y-m-d H:i:s');
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:
$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');
$new_date_format = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM')->format('Y-m-d H:i:s');