PHP date() auf deutsch

odigo

Member of Honour
Hallo zusammen,

ich habe ein sehr nerviges Problem mit der date-Funktion in PHP. Ich schaff es nicht, daß date mir die deutschen Monatsnamen liefert. Ich kann mit setlocale einstellen was ich will, es wird mir immer in englisch angezeigt.
Google sagt, daß es mit der Funktion strftime wohl geht oder man ein Mapping-Array ('Dec' => 'Dez') benutzen soll. Diese beiden Lösungsversuche sind eher suboptimal. In meinem Fall benutzt ein Wordpress-Plugin knallhart die date-Funktion und ich will es irgend wie umgehen daß ich hier im Code rumpfuschen muss.

PHP:
<?php
setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');
$link = mysql_connect('localhost', 'root', '');
if (!$link) {
    die('Verbindung schlug fehl: ' . mysql_error());
}
/*echo 'Erfolgreich verbunden';*/
mysql_select_db('test'); 
$sql = 'select DATE_FORMAT(DATE("2003-12-31 01:02:03"), "%b") as xy from test';
$result = mysql_query($sql);
$test = mysql_result($result, 0, 'xy');

echo 'aus DB: '.mysql_result($result, 0, 'xy').'<br>';

echo 'PHP-date(): '.date("M", strtotime("2011-12-31")).'<br>';


echo 'PHP-strftime(): '.strftime("%b", strtotime("2011-12-31"));

mysql_close($link);
?>
Ergebnis bei mir:
aus DB: Dec
PHP-date(): Dec
PHP-strftime(): Dez
Jemand eine Idee? Man würde doch meinen daß das nicht so schwer sein sollte.

Edit:
Mein Testsystem: Win7 deutsch; aktueller XAMPP
 
Zuletzt bearbeitet:

she3p

Member
Ich kann mit setlocale einstellen was ich will, es wird mir immer in englisch angezeigt.

Das scheint gemäss Dokumentation wirklich so zu sein.

To format dates in other languages, you should use the setlocale() and strftime() functions instead of date().

Wie wird denn der String auf dem Template ausgegeben? Vielleicht einfach das Template anpassen (neues Theme?). Dies dann wohl mithilfe von Stringmanipulationen. Keine saubere Sache, leider.
 

odigo

Member of Honour
Das scheint gemäss Dokumentation wirklich so zu sein.
Das besätigt meine persönliche Meinung mal wieder daß PHP eine ziemliche Krankheit ist.

Das eigentliche Problem hat sich wohl erledigt. Ich mach das im Aufrag eines Kumpels. Der hat mir aber bis dato verschwiegen, daß das Plugin von ihm stammt. Ab sofort benutzt er strftime statt date.

Danke! :thumb_up:
 

she3p

Member
Das besätigt meine persönliche Meinung mal wieder daß PHP eine ziemliche Krankheit ist. [...]
Ab sofort benutzt er strftime statt date.

Öhm Vorsicht. PHP achtet darauf keine BC-Breaks zu generieren und ich finde ehrlich gesagt wenig falsches daran. Seit PHP 5.2 steht das DateTime-Objekt zur Verfügung. Ich rate davon ab heutzutage noch mit Strings als Zeit/Datum-Repräsentation zu arbeiten. :)
 

she3p

Member
Also lieber mal Fehler/unlogisches Verhalten behalten um die Abwärtskompatibilität nicht zu gefährden 8)

Tja, frag mich nicht nach den Gründen. Leider finde ich keinerlei Infos dazu, noch nicht mal ein Ticket im Bugtracker. Vielleicht weiss da jemand mehr? Würde mich wirklich interessieren.
 

Chakky

Member of Honour
Google :)
PHP:
$trans => array(
    'Monday'    => 'Montag',
    'Tuesday'   => 'Dienstag',
    'Wednesday' => 'Mittwoch',
    'Thursday'  => 'Donnerstag',
    'Friday'    => 'Freitag',
    'Saturday'  => 'Samstag',
    'Sunday'    => 'Sonntag',
    'Mon'       => 'Mo',
    'Tue'       => 'Di',
    'Wed'       => 'Mi',
    'Thu'       => 'Do',
    'Fri'       => 'Fr',
    'Sat'       => 'Sa',
    'Sun'       => 'So',
    'January'   => 'Januar',
    'February'  => 'Februar',
    'March'     => 'März',
    'May'       => 'Mai',
    'June'      => 'Juni',
    'July'      => 'Juli',
    'October'   => 'Oktober',
    'December'  => 'Dezember',
);
$wochentag = date("D", $timestamp_fuer_wochentag)
$wochentag = strtr($wochentag, $trans);

Sollte ja nicht so viel ressourcen fressen
 

odigo

Member of Honour
Chakky, daß ein Mapping natürlich immer möglich hab ich schon in meinem Eingangspost erwähnt. Schöner wurds seitdem aber immer noch nicht :)
 

Chakky

Member of Honour
Ich gestehe das hab ich überlesen :D

kannst du evtl in der php.ini schon das setlocale ändern?
 

Kitt

New member
Date Eingangsort lokalisieren

Versuche heraûszufinden wo das Datum Generiert wird.
Dann solte es dort in einem Skript definiert sein und lässt sich dort sicher auch umschreiben.
 
Oben