PHP Convertir una fecha en otro formato


Ejemplo

Los basicos

La forma más simple de convertir un formato de fecha en otro es usar strtotime() con date() . strtotime() convertirá la fecha en una marca de tiempo Unix . Ese sello de tiempo de Unix se puede pasar a la 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 que la fecha esté en un formato válido . Si no se proporciona un formato válido, strtotime() devolverá false, lo que provocará que su fecha sea 1969-12-31.

Usando DateTime()

A partir de PHP 5.2, PHP ofreció la clase DateTime() que nos ofrece herramientas más poderosas para trabajar con fechas (y hora). Podemos reescribir el código anterior usando DateTime() como tal:

$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');

Trabajando con las marcas de tiempo de Unix

date() toma una marca de tiempo de 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 una @ antes de la marca de hora:

$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');

Si la marca de tiempo que tiene es en milisegundos (puede terminar en 000 y / o la marca de tiempo tiene una longitud de trece caracteres), deberá convertirla en segundos antes de poder convertirla a otro formato. Hay dos maneras 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 la más fácil:

$timestamp = substr('1234567899000', -3);
  • Divide 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 que los sistemas de 32 bits puedan realizar operaciones matemáticas, necesitará usar la biblioteca BCMath para hacer las matemáticas como cadenas:

$timestamp = bcdiv('1234567899000', '1000');

Para obtener una marca de tiempo Unix puede usar 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 opción de formato U 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 una mayor 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 acceso a los miembros de la clase en la creación de instancias, lo 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');

Desafortunadamente, esto todavía no funciona con DateTime::createFromFormat() .