2009-08-28 11 views
11

Sto provando a convertire un mysat DATETIME in questo formato m/g/ma il codice sottostante non funziona, restituisce il 31/12/1969 invece qualcuno può mostrarmi come farlo?Come convertire un datetime mysql in PHP in formato m/d/y?

$fromMYSQL = '2007-10-17 21:46:59'; //this is the result from mysql DATETIME field 
echo date("m/d/Y", $fromMYSQL); 

risposta

41

Credo che ciò che si vuole veramente è questo:

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

Il secondo argomento della data è un timestamp e penso che quello che sta succedendo è PHP vede la stringa come un -1 timestamp ... quindi 12/31/1969.

Quindi, per ottenere un timestamp dalla versione stringa della data, si utilizza strtotime

+1

Modificare la stringa di formato su "m/d/Y" e farò l'upvot. Vuole un anno a 4 cifre. – MitMaro

+0

grazie! Ha funzionato! con php7 –

+0

Grande. Lavori. Facile da implementare. – MarcoZen

1

due questioni:

1) è necessario un capitale Y

2) Avete bisogno di un corretto tipo di data.

Prova

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

Ops, strtotime è il diritto di conversione a un timestamp. date_create restituisce un oggetto DateTime.

2

Hai bisogno di un capitale Y int la stringa di formato della data. il minuscolo y restituisce un anno a due cifre e il maiuscolo 'Y' indica un anno a quattro cifre.

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

PHP Manual Page For date può essere di qualche aiuto.

+1

si è corretto per ottenere un anno a 4 cifre tuttavia che non aiuta con il mio problema di non mostrare la data corretta, mostra 01/12/1969 – JasonDavis

+0

Risposta aggiornata. 'strtotime' dovrebbe analizzare il tempo da MySql. – MitMaro

7

SQL:

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

PHP:

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

ho coperto questo nella mia risposta alla h ttp://stackoverflow.com/questions/499014/i-need-to-change-the-date-format-using-php/499021#499021 - in sostanza, date() si aspetta un timestamp Unix da cui calcola la data/l'ora e formatta quello. Stai trasmettendo una stringa che deriva dal risultato della query MySQL, che probabilmente viene alterata dalla digitazione di PHP in qualcosa che assomiglia a un timestamp Unix, ma non ha senso.

spiego un paio di approcci per trattare con le colonne di data nella mia risposta.

3

Il modo migliore è quello di convertire il dateformat direttamente nella tua Querystring:

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

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

In caso contrario è possibile modificare questa funzione alle proprie esigenze:

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)) : ""; 
} 
Problemi correlati