Convierta desde MySQL datetime a otro formato con PHP


Tengo una columna datetime en MySQL.

¿Cómo puedo convertirlo a la pantalla como mm/dd/yy H:M (AM/PM) usando PHP?

Author: davejal, 2008-09-26

17 answers

Si está buscando una manera de normalizar una fecha en formato MySQL, use lo siguiente

$phpdate = strtotime( $mysqldate );
$mysqldate = date( 'Y-m-d H:i:s', $phpdate );

La línea $phpdate = strtotime( $mysqldate ) acepta una cadena y realiza una serie de heurísticas para convertir esa cadena en una marca de tiempo unix.

La línea $mysqldate = date( 'Y-m-d H:i:s', $phpdate ) usa esa marca de tiempo y PHP date función para volver a convertir esa marca de tiempo en el formato de fecha estándar de MySQL.

(Nota del editor: Esta respuesta está aquí debido a una pregunta original con una redacción confusa, y Utilidad de Google esta respuesta proporciona incluso si no ' responder directamente a la pregunta que ahora existe)

 473
Author: kta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-16 19:09:00

Para convertir una fecha recuperada de MySQL al formato solicitado (mm/dd/yy H:M (AM/PM)):

// $datetime is something like: 2014-01-31 13:05:59
$time = strtotime($datetimeFromMysql);
$myFormatForView = date("m/d/y g:i A", $time);
// $myFormatForView is something like: 01/31/14 1:05 PM

Consulte las opciones de formato de fecha de PHP para ajustar el formato.

 289
Author: Tim Boland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-21 10:23:52

Si está utilizando PHP 5, también puede probar

$oDate = new DateTime($row->createdate);
$sDate = $oDate->format("Y-m-d H:i:s");
 103
Author: enobrev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-13 20:02:59
$valid_date = date( 'm/d/y g:i A', strtotime($date));

Referencia: http://php.net/manual/en/function.date.php

 35
Author: Tony Stark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-24 13:24:19

Finalmente la solución correcta para PHP 5.3 y superior:

$date = \DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
echo $date->format('m/d/y h:i a');
 15
Author: Hasenpriester,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-21 00:44:39

Una forma más fácil sería formatear la fecha directamente en la consulta MySQL, en lugar de PHP. Vea la entrada del manual de MySQL para DATE_FORMAT.

Si prefiere hacerlo en PHP, entonces necesita la función date, pero primero tendrá que convertir el valor de su base de datos en una marca de tiempo.

 12
Author: flash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-25 23:15:23

Olvídate de todo. Solo use:

$date = date("Y-m-d H:i:s",strtotime(str_replace('/','-',$date)))
 10
Author: nixis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-09 16:51:03

Para formatear correctamente un objeto DateTime en PHP para almacenarlo en MySQL, utilice el formato estandarizado que utiliza MySQL, que es ISO 8601.

PHP ha tenido este formato almacenado como una constante desde la versión 5.1.1, y recomiendo encarecidamente usarlo en lugar de escribir manualmente la cadena cada vez.

$dtNow = new DateTime();
$mysqlDateTime = $dtNow->format(DateTime::ISO8601);

Esta, y una lista de otras constantes de PHP DateTime están disponibles en http://php.net/manual/en/class.datetime.php#datetime.constants.types

 9
Author: Greg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-31 17:42:08

Esto debería dar formato a un campo en una consulta SQL:

SELECT DATE_FORMAT( `fieldname` , '%d-%m-%Y' ) FROM tablename
 8
Author: riz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-09 16:49:21

Utilice la función date :

<?php
    echo date("m/d/y g:i (A)", $DB_Date_Field);
?>
 7
Author: Gustavo Carreno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-25 23:16:05

Dependiendo de su configuración de MySQL datetime. Normalmente: 2011-12-31 07:55:13 formato. Esta función muy simple debería hacer la magia:

function datetime()
{
    return date( 'Y-m-d H:i:s', time());
}

echo datetime(); // display example: 2011-12-31 07:55:13

O un poco más de avance para que coincida con la pregunta.

function datetime($date_string = false)
{
    if (!$date_string)
    {
        $date_string = time();
    }
    return date("Y-m-d H:i:s", strtotime($date_string));
}
 5
Author: tfont,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-29 11:45:52
SELECT 
 DATE_FORMAT(demo.dateFrom, '%e.%M.%Y') as dateFrom,
 DATE_FORMAT(demo.dateUntil, '%e.%M.%Y') as dateUntil
FROM demo

Si no desea cambiar todas las funciones en su código PHP, para mostrar el formato de fecha esperado, cámbielo en la fuente: su base de datos.

Es importante nombrar las filas con el operador como como en el ejemplo anterior (como DateFrom, como dateUntil). Los nombres que escriba allí son los nombres, las filas se llamarán en su resultado.

La salida de este ejemplo será

[Día del mes, numérico (0..31)].[Nombre del mes (enero..Diciembre)].[Año, numérico, cuatro dígitos]

Ejemplo: 5.Agosto.2015

Cambie los puntos con el separador de su elección y compruebe la función DATE_FORMAT(date,format) para obtener más formatos de fecha.

 5
Author: Rangel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-09 18:12:37

También puede hacer que su consulta devuelva la hora como una marca de tiempo Unix. Eso eliminaría la necesidad de llamar a strtotime() y haría las cosas un poco menos intensivas en el lado de PHP...

select  UNIX_TIMESTAMP(timsstamp) as unixtime from the_table where id = 1234;

Luego, en PHP solo use la función date() para formatearlo de la manera que desee.

<?php
  echo date('l jS \of F Y h:i:s A', $row->unixtime);
?>

O

<?php
  echo date('F j, Y, g:i a', $row->unixtime);
?>

Me gusta este enfoque en lugar de usar MySQL 's DATE_FORMAT función, porque le permite reutilizar la misma consulta para agarrar los datos y le permite alterar el formato en PHP.

Es molesto tener dos consultas diferentes solo para cambiar la forma en que se ve la fecha en la interfaz de usuario.

 3
Author: phatduckk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-09 16:45:24

Puede tener problemas con las fechas no devueltas en la marca de tiempo Unix, así que esto funciona para mí...

return date("F j, Y g:i a", strtotime(substr($datestring, 0, 15)))
 1
Author: matt.j.crawford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-16 23:52:33

Esto funcionará...

echo date('m/d/y H:i (A)',strtotime($data_from_mysql));
 1
Author: Mihir Vadalia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-12 06:11:04

Usando PHP versión 4.4.9 & MySQL 5.0, esto funcionó para mí:

$oDate = strtotime($row['PubDate']);
$sDate = date("m/d/y",$oDate);
echo $sDate

PubDate es la columna en MySQL .

 0
Author: Peter Mortensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-09 16:47:30
$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
 -1
Author: SagarPPanchal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-02 13:00:47