Domanda

Qual è il modo più semplice e veloce per completare il codice PHP di seguito in modo che l'output sia in un formato intuitivo (ad esempio, "27 ottobre 2006")?

$result = mysql_query("SELECT my_timestamp FROM some_table WHERE id=42", $DB_CONN);
$row = mysql_fetch_array($result);
$formatted_date = ???($row['my_timestamp']);
echo $formatted_date;
È stato utile?

Soluzione

Puoi usare MySQL per farlo,

$result = mysql_query("SELECT DATE_FORMAT(my_timestamp, '%M %d, %Y) AS my_timestamp FROM some_table WHERE id=42", $DB_CONN);
$row = mysql_fetch_array($result);
$formatted_date = $row['my_timestamp'];
echo $formatted_date;

O usa PHP,

$result = mysql_query("SELECT my_timestamp FROM some_table WHERE id=42", $DB_CONN);
$row = mysql_fetch_array($result);
$formatted_date = strftime('%B %d, %y', $row['my_timestamp']);
echo $formatted_date;

Altri suggerimenti

Tendo a fare la formattazione della data in SQL, come Aron 's answer. Anche se per le date PHP, preferisco usare l'oggetto DateTime ( PHP5 +) oltre data :

$timestamp = new DateTime($row['my_timestamp']);
echo $timestamp->format('F j, Y') . '<br />';
echo $timestamp->format('F j, Y g:ia');

Vuoi la date () .

Se hai una colonna DATE o DATETIME, puoi usare SELECT UNIX_TIMESTAMP (mycolumn) AS mycolumn per convertirlo in un timestamp unix per l'uso della funzione date.

Dovresti assolutamente usare la classe DateTime (o qualsiasi classe equivalente cresciuta in casa), oltre la funzione de Date, e non usare i timestamp:

  • Il timestamp non funziona bene in tutti gli ambienti per le date precedenti al 1970 - se hai a che fare con i compleanni, fai affidamento su codice che potrebbe non funzionare su alcuni server
  • Stai anche molto attento all'uso dello strftime, sembra una bella funzione, ma è molto sgradevole, poiché dipende da setlocale, che è a livello di processo. Ciò significa che se il tuo server è un box di Windows, hai un processo per processore, e il resto è multi-thread - in altre parole, un setlocale in uno script influenzerà gli altri script sullo stesso processore - molto brutto !

Alla fine della giornata, non fare affidamento sui timestamp, a meno che tu non sia in un ambiente solo inglese, e gestisca solo date tra il 1970 e il 2032 ...!

Se hai le tue tabelle indicizzate su quel campo data e usi una funzione di formato dati mysql nella tua chiamata .. (es. SELEZIONA DATA_FORMAT (my_timestamp, '% M% d,% Y) AS my_time) distruggerà la tua indicizzazione. Qualcosa da tenere a mente. Abbiamo visto un notevole aumento della velocità nel rimuovere tutto il funzionamento dalle nostre istruzioni sql e lasciare che php gestisca tutto. Funzionano come date di formattazione e matematica semplice

Uso:

data (" F j, Y " ;, strtotime ($ row ['my_timestamp']))

oppure puoi cambiare SELEZIONA in: DATE_FORMAT (campo, '% d% M,% Y') come datetime

Hai una scelta. Puoi usare la funzione date () in PHP ed elaborare l'output di MySQL, oppure puoi usare la funzione date_format () funzione in MySQL e per cominciare restituisce una stringa formattata.

Nella mia esperienza è che non importa quale usi, ma Siate coerenti. Hanno parametri di formattazione diversi, quindi se usi entrambi in una determinata applicazione, passerai molto tempo a cercare di ricordare se "W" ti dà il nome del giorno della settimana o della settimana dell'anno.

Chiedi al database di eseguire la formattazione per te. È molto meno suscettibile all'errore perché non stai leggendo una stringa e non la stai convertendo. Invece, il database sta passando dal suo formato nativo a una stringa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top