2009-07-11 4 views
15

ich im italienischen Format zur Ausgabe von Terminen versuchen date() wie folgt verwendet:PHP Datum Funktion Ausgabe in Italienisch

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

Es ist jedoch immer noch im englischen Format herauskommen. Was könnte ich noch tun? Stimmt irgendetwas nicht?

Die Lösung hat Skript spezifisch und nicht serverweite ...

Dank

Shadi

Antwort

39

date() ist nicht Gebietsschema-bewusst. Sie sollten strftime() und seine Formatbezeich zur Ausgabe locale-aware Daten (von dem date() PHP-Handbuch) verwenden:

um Datum- in anderen Sprachen, Sie die setlocale() und strftime() Funktionen statt date() verwenden sollten.

In Bezug auf Anti Veeranna ‚s Kommentar: Er ist absolut richtig, da man sehr vorsichtig sein mit der Einstellung locales, wie sie manchmal nicht auf den aktuellen Skriptbereich beschränkt. Der beste Weg wäre:

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

Perfekt, das hat funktioniert :) –

+3

Denken Sie daran, dass setlocale nicht Skript-spezifisch ist, es ist Thread-spezifisch, so ist es möglich, dass das Gebietsschema "darunter" Sie ändert. http://ee.php.net/setlocale erklärt es auch. –

+0

Es ist nicht nur Thread-spezifisch, es ist prozessspezifisch. Sie können also auch andere laufende PHP-Instanzen ändern. (http://www.php.net/manual/en/function.setlocale.php#refsect1-function.setlocale-notes) – apfelbox

2
+0

ich Ihre Lösung hier verwendet: inmaremma.net nur, dass der Akzent Zeichen als Fragezeichen dargestellt werden. Ich glaube, ich setze die HTML-Sprache richtig auf Italienisch mit –

+0

@AdiCumpanasu Sie werden wahrscheinlich auch den Zeichensatz auf UTF-8 setzen müssen. Platziere folgendes zwischen '' und '': ''. – Sampson

+0

löste es Verpackung wie folgt: utf8_encode (strftime ("% A% d% B% Y")) –

3

it_IT locale installiert werden muss/aktiviert, indem der Server Admin sein, sonst wird das nicht funktionieren.

Also, Jonathan Lösung ist wahrscheinlich die beste.

+0

Ich habe vollen Zugriff auf den Server, irgendwelche Ideen, wo ich überprüfen kann, welche lokale installiert sind? –

+0

durch Eingabe von 'locale -a', wenn dieser Server eine Variante von Linux/BSD ausführt. –

2

Ich fand, dass setlocale nicht zuverlässig ist, da es pro Prozess festgelegt ist, nicht pro Thread (das Handbuch erwähnt dies). Dies bedeutet, dass andere laufende Skripts das Gebietsschema jederzeit ändern können. Eine Lösung verwendet IntlDateFormatter von der intl PHP-Erweiterung.

$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()); 

Wenn es Sie nicht funktioniert, könnte müssen:

  • installieren intl PHP-Erweiterung (ubuntu Beispiel): sudo apt-get install php5-intl

  • Installieren Sie das Gebietsschema Sie verwenden möchten: sudo locale-gen it_IT

0

Über die a Artikel auf http://www.phpnews.it/articoli/ottenere-date-in-italiano/response schlagen das Blog eine alternative Methode, aber der Code ist nicht, die hier arbeiten, ist der richtige Code:

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; 

    }