2009-08-28 28 views

Respuesta

41

Creo que lo que realmente quiere es la siguiente:

$fromMYSQL = '2007-10-17 21:46:59'; 
echo date("m/d/Y", strtotime($fromMYSQL)); 

El segundo argumento de fecha es una marca de tiempo y creo que lo que está sucediendo es PHP ve su cadena como una marca de tiempo -1 ... de este modo 12/31/1969.

Por lo tanto, para conseguir una marca de tiempo de la versión de cadena de la fecha, se utiliza strtotime

+1

Cambia la cadena de formato a "m/d/Y" y voy a votar de nuevo. Él quiere un año de 4 dígitos. – MitMaro

+0

¡gracias! ¡Funcionó! con php7 –

+0

genial. Trabajos. Fácil de implementar. – MarcoZen

1

dos cuestiones:

1) Se necesita un mayúscula

2) Es necesario un tipo de fecha correcta.

Trate

$fromMYSQL = date_create ('2007-10-17 21:46:59');  
echo date("m/d/Y", $fromMYSQL); 

Vaya, strtotime es la conversión derecho a una marca de tiempo. date_create devuelve un objeto DateTime.

2

Necesita una capital Y en la cadena de formato de fecha. la minúscula y da un año de dos dígitos y la mayúscula 'Y' da un año de cuatro dígitos.

$fromMYSQL = '2007-10-17 21:46:59'; 
echo date("m/d/Y", strtotime($fromMYSQL)); 

PHP Manual Page For date puede ser de alguna ayuda.

+1

estás en lo correcto para conseguir un año de 4 dígitos sin embargo eso no ayuda con mi problema de no mostrar la fecha correcta, muestra 31/12/1969 – JasonDavis

+0

Respuesta actualizada. 'strtotime' debe analizar el tiempo de MySql. – MitMaro

7

SQL:

SELECT whatever, UNIX_TIMESTAMP(date) date FROM table WHERE whatever 

PHP:

date('m/d/Y', $result['date']); 
2

cubrí esto en mi respuesta a h ttp://stackoverflow.com/questions/499014/i-need-to-change-the-date-format-using-php/499021#499021 - básicamente, date() espera una marca de tiempo Unix a partir de la cual calcula la fecha/hora y formatea eso. Está pasando una cadena que proviene del resultado de la consulta de MySQL, que probablemente se arruine al escribir el pato de PHP en algo que parece una marca de tiempo de Unix, pero no tiene sentido.

Explicar un par de enfoques para tratar con las columnas de fecha en mi respuesta.

3

La mejor forma de hacerlo es convertir el dateformat directa en su cadena de consulta:

$TimeFormat = "%m/%d/%Y"; // your pref. Format 

$sql = "SELECT DATE_FORMAT(DateCol , '" . $TimeFormat . "') as ConvertDate FROM tblTest"; 

lo contrario se puede modificar esta función a sus necesidades:

function format_date($original, $format) { 
    if (empty($original)) { 
     $original = date("Y-m-d H:i:s"); 
    } 
    $original = ereg_replace("30 Dez 1899", "30-01-1973", $original); 
    $format = ($format=='date' ? "%m-%d-%Y" : $format); 
    $format = ($format=='germandate' ? "%d.%m.%y" : $format); 
    $format = ($format=='germandaydate' ? "%A, %d.%m.%Y" : $format); 
    $format = ($format=='germantime' ? "%H:%M" : $format); 
    $format = ($format=='germandatetime' ? "%d.%m.%y %H:%M:%S" : $format); 
    $format = ($format=='datetime' ? "%m-%d-%Y %H:%M:%S" : $format); 
    $format = ($format=='mysql-date' ? "%Y-%m-%d" : $format); 
    $format = ($format=='mysql-datetime' ? "%Y-%m-%d %H:%M:%S" : $format); 
    $format = ($format=='mssql-date' ? "%Y%m%d" : $format); 
    $format = ($format=='mssql-datetime' ? "%Y%m%d %H:%M:%S" : $format); 
    $format = ($format=='Ymd' ? "%Y-%m-%d" : $format); 
    return !empty($original) ? strftime($format, strtotime($original)) : ""; 
} 
Cuestiones relacionadas