2009-07-11 20 views
15

sto cercando di date di uscita nel formato italiano utilizzando date() come segue:PHP uscita funzione Data in italiano

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

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

La soluzione deve essere script specifico e non server di un'ampia ...

Grazie

Shadi

risposta

39

date() non è locale. Si dovrebbe usare strftime() e il suo formato prescrittori per uscita date informativi sulla localizzazione (dal manuale date() PHP):

per formattare le date in altre lingue, è necessario utilizzare le funzioni setlocale() e strftime() invece di date().

Per quanto riguarda commento Anti Veeranna s': lui è assolutamente ragione, dal momento che bisogna essere molto attenti con l'impostazione locali in quanto sono a volte non si limitano al campo di applicazione 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); 
+0

Perfetto, ha funzionato :) –

+3

Ricorda che setlocale non è specifico per lo script, è specifico per i thread, quindi è possibile che le impostazioni locali cambino "sotto" tu. http://ee.php.net/setlocale lo spiega anche. –

+0

Non è solo specifico del thread, è specifico del processo. Quindi potresti cambiare anche altre istanze PHP in esecuzione. (Http://www.php.net/manual/en/function.setlocale.php#refsect1-function.setlocale-notes) – apfelbox

2
+0

Ho usato la soluzione qui: inmaremma.net Solo che i caratteri accentati sono resi come punti interrogativi. Credo di aver impostato correttamente il linguaggio html in italiano con –

+0

@AdiCumpanasu Probabilmente avrai anche bisogno di impostare il set di caratteri su UTF-8. Inserire il seguente tra '' e '': ''. – Sampson

+0

risolto in questo modo: utf8_encode (strftime ("% A% d% B% Y")) –

3

it_IT locale deve essere installato/attivato dal vostro amministratore del server, altrimenti questo non funzionerà.

Quindi, la soluzione di Jonathan è probabilmente la migliore.

+0

Ho pieno accesso al server, qualche idea in cui posso verificare quale locale è installato? –

+0

digitando 'locale -a' se quel server sta eseguendo alcune varianti di Linux/BSD. –

2

ho trovato che setlocale non è affidabile, come è impostato per processo, non a filo (manuale menziona questo). 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 dovesse funzionare potrebbe essere necessario:

  • Installare intl php estensione (ad esempio Ubuntu): sudo apt-get install php5-intl

  • Installare il locale che si desidera utilizzare: sudo locale-gen it_IT

0

Informazioni sul Articolo sul http://www.phpnews.it/articoli/ottenere-date-in-italiano/response, il blog suggerire un metodo alternativo, ma il codice non funziona, ecco il codice corretto:

function timestamp_to_date_italian($date) 
    {  
     $months = array(
       '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('d-m-Y', $date));  
     return $day . ' ' . $months[$month] . ' ' . $year; 

    }