Los fundamentos
La manera simplista para convertir un formato de fecha a otra es utilizar strtotime()
con date()
. strtotime()
convertirá la fecha en Unix Timestamp. Esa marca de tiempo Unix se puede pasar al date()
para convertirlo 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 sola línea:
$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));
Tenga en cuenta que strtotime()
requiere la fecha para estar en una valid format. Si no se proporciona un formato válido, el strtotime()
devuelve falso, lo que provocará que su fecha sea 1969-12-31.
Usando DateTime()
A partir de PHP 5.2, PHP ofrece la clase DateTime()
que nos ofrece las herramientas más potentes para trabajar con fechas (y tiempo). Podemos reescribir el código anterior utilizando DateTime()
como tan:
$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');
Trabajando con Unix marcas de tiempo
date()
toma un timeatamp Unix como su segundo parámetro y devuelve una fecha formateada para usted:
$new_date_format = date('Y-m-d H:i:s', '1234567890');
DateTime() funciona con 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 tiene está en milisegundos (puede terminar en 000
y/o la marca de tiempo tiene trece caracteres) necesitará convertirla a segundos para poder convertirla a otro formato.Hay dos maneras de hacer esto:
- Recorte los últimos tres dígitos off utilizando
substr()
Recorte los tres últimos dígitos se puede lograr de varias maneras, pero utilizando substr()
es la más fácil:
$timestamp = substr('1234567899000', -3);
- Dividir el substr por 1000
También puede convertir la marca de tiempo en segundos dividiendo por 1000. Debido a que la marca de tiempo es demasiado grande para sistemas de 32 bits para hacer matemáticas en la que tendrá que utilizar la biblioteca BCMath a hacer los cálculos como cadenas:
$timestamp = bcdiv('1234567899000', '1000');
Para obtener una marca de tiempo Unix puede utilizar strtotime()
que devuelve una marca de tiempo Unix:
$timestamp = strtotime('1973-04-18');
Con DateTime() se puede utilizar DateTime::getTimestamp()
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();
Si está ejecutando PHP 5.2 se puede utilizar la opción U
la aplicación de formato:
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');
Trabajar con formatos no estándar y fecha ambigua
Desafortunadamente no todas las fechas en las que un desarrollador tiene que trabajar con están en un formato estándar. Afortunadamente, PHP 5.3 nos brindó una solución para eso. DateTime::createFromFormat()
nos permite decirle a PHP en qué formato está una cadena de fecha para que pueda analizarse correctamente 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 ganamos la capacidad de hacer el acceso miembro de la clase en la creación de instancias se ha añadido que nos permite convertir nuestro código DateTime()
en una sola 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');
http://tech-blog.maddyzone.com/php/type-date-convert-php muy buen artículo –