PHP Date output della function in italiano

Sto cercando di printingre le date nel formato italiano usando date() come segue:

 <?php setlocale(LC_ALL, 'it_IT'); echo date("D d MY", $row['eventtime']); ?> 

Tuttavia, sta ancora uscendo nel formato inglese. Cos'altro potrei fare? C'è qualcosa di sbagliato?

La soluzione deve essere specifica dello script e non del server …

Grazie

Shadi

date() non è consapevole delle impostazioni internazionali. Dovresti usare strftime() e i suoi specificatori di formato per mostrare le date sensibili alle impostazioni locali (dal manuale PHP date() ),

Per formattare le date in altre lingue, dovresti usare le funzioni setlocale() e strftime() invece di date() .

Per quanto riguarda il commento di Anti Veeranna : ha assolutamente ragione, dal momento che devi stare molto attento nell'impostare i locales in quanto a volte non sono limitati all'ambito di script corrente. Il modo migliore sarebbe:

 $oldLocale = setlocale(LC_TIME, 'it_IT'); echo utf8_encode( strftime("%a %d %b %Y", $row['eventtime']) ); setlocale(LC_TIME, $oldLocale); 

it_IT locale deve essere installato / abilitato dall'amministratore del server, altrimenti questo non functionrà.

Quindi, la soluzione di Jonathan è probabilmente la migliore.

Ho trovato che setlocale non è affidabile, poiché è impostato per process, non per thread (il manuale lo menziona). Ciò significa che altri script in esecuzione possono modificare le impostazioni locali in qualsiasi momento. Una soluzione utilizza IntlDateFormatter dall'estensione php intl .

 $fmt = new \IntlDateFormatter('it_IT', NULL, NULL); $fmt->setPattern('d MMMM yyyy HH:mm'); // See: http://userguide.icu-project.org/formatparse/datetime for pattern syntax echo $fmt->format(new \DateTime()); 

Se non funziona potrebbe essere necessario:

  • Installa l'estensione php intl (esempio di ubuntu): sudo apt-get install php5-intl

  • Installa le impostazioni internazionali che desideri utilizzare: sudo locale-gen it_IT

Circa l'articolo su http://www.phpnews.it/articoli/get-date-in-italiano/response , il blog suggerisce un metodo alternativo, ma il codice non funziona, ecco il codice corretto:

 function timestamp_to_date_italian($date) { $months = arrays( '01' => 'Gennaio', '02' => 'Febbraio', '03' => 'Marzo', '04' => 'Aprile', '05' => 'Maggio', '06' => 'Giugno', '07' => 'Luglio', '08' => 'Agosto', '09' => 'Settembre', '10' => 'Ottobre', '11' => 'Novembre', '12' => 'Dicembre'); list($day, $month, $year) = explode('-',date('dm-Y', $date)); return $day . ' ' . $months[$month] . ' ' . $year; }