WordPress & Webwork

PHP-lernen 7.1: deutschsprachiges Datum

Im letzten Beitrag zu PHP habe ich den Aufbau der Arrays beschrieben. Um das Verständnis der Arrays und deren Einsatz besser zu erklären, werde ich hier einige einfache Beispiele liefern.

Im letzten Beitrag zu PHP habe ich den Aufbau der Arrays beschrieben. Um das Verständnis der Arrays und deren Einsatz besser zu erklären, werde ich hier einige einfache Beispiele liefern.

Als erstes stelle ich die Funktion date() vor. Diese Funktion gibt eine formatierte Zeitangabe zurück. Je nach dem welchen Platzhalter bzw. Formatierschalter man einsetzt bekommt man verschiedene Ausgaben:


<?php
echo date("Y");
?>

Die Ausgabe wäre: 2004. Eine Auflistung dieser "Schalter" bekommt man u. a. hier und hier. Hier ein weiteres Beispiel:


<?php
echo "Heute ist " . date("l") . ", der " . date("d. F Y");
?>

Die Ausgabe wäre: Heute ist Tuesday, der 20. April 2004

An sich nicht falsch, allerdings wäre es schöner wenn die Ausgabe deutschsprachig wäre. Hierbei kommen die Arrays zum Einsatz.


<?php
$wochentag=array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
// Wochentage
$monat=array("January"=>"Januar", "February"=>"Februar", "March"=>"März", "April"=>"April", "May"=>"Mai", "June"=>"Juni", "July"=>"Juli", "August"=>"August", "September"=>"September", "October"=>"Oktober", "November"=>"November", "December"=>"Dezember");
// Monatsnamen
echo "Heute ist " . $wochentag[date("w")] . ", der " . date("d. ") . $monat[date("F")]. " " . date("Y");
?>

Die Ausgabe wäre: Heute ist Dienstag, der 20. April 2004

Nun zu der Erklärung. Als erstes habe ich Wochentage in einem Array (Kurzschreibweise) untergebracht. Sonntag hat einen Indexwert von 0 und Samstag einen Indexwert von 6. Das ist gut, denn date("w") (hierbei nicht, wie ich, die Anführungszeichen vergessen *g*) gibt mir Zahlen von 0-6 raus (Sonntag bis Samstag).

Als zweites habe ich ein assoziativen Array mit Monatsnamen gemacht, denn date("F") gibt engische Monatsnamen raus. Es gäbe eine weitere Möglichkeit das Monatsnamen-Problem zu lösen:


<?php
$monat=array(); //Anmerkung von Garvin
$monat[1]="Januar";
$monat[2]="Februar";
$monat[3]="März";
$monat[4]="April";
$monat[5]="Mai";
$monat[6]="Juni";
$monat[7]="Juli";
$monat[8]="August";
$monat[9]="September";
$monat[10]="Oktober";
$monat[11]="November";
$monat[12]="Dezember";
echo $monat[date("n")];
?>

Hierbei musste ich die Indexierung selber vornehmen, da date("n") Werte zwischen 1-12 liefert. Mir ist schon irgendwie klar, daß es für die deutschsprachige Datumsasugabe bestimmt eine elegantere Lössung gibt.

Array-Elemente mit count() zählen

Die Funktion count() erlaubt uns die Array-Elemente zu zählen. Hier ein Beispiel:

<?php
$wochentag=array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
// Wochentage
$monat=array("January"=>"Januar", "February"=>"Februar", "March"=>"März", "April"=>"April", "May"=>"Mai", "June"=>"Juni", "July"=>"Juli", "August"=>"August", "September"=>"September", "October"=>"Oktober", "November"=>"November", "December"=>"Dezember");
// Monatsnamen
echo "Heute ist " . $wochentag[date("w")] . ", der " . date("d. ") . $monat[date("F")]. " " . date("Y") . "<br />\n";
echo "Die Woche hat " . count($wochentag) . " Tage und das Jahr hat " . count($monat) . " Monate";
?>

Die Ausgabe würde so aussehen:
Heute ist Dienstag, der 20. April 2004
Die Woche hat 7 Tage und das Jahr hat 12 Monate

@Garvin &Martin, evtl. könntet ihr mir an diesen Beispielen erklären ob eher " oder ' angebrachter wären.

4 Reaktion(en)

  1. Pingback: C-blog - Bock auf Blog » Artikel aus Peruns Blog III

  2. Garvin Hicking

    In den obigen Beispiel haben sich leider einige Fehler eingeschlichen:

    echo date(Y);
    – sollte heißen (mit anführungszeichen):
    echo date('Y');

    echo "Heute ist " . date("l"); . ", der " . date("d. F Y");
    – sollte heißen (ohne zusätzliches semikolon):
    echo "Heute ist " . date("l") . ", der " . date("d. F Y");

    Der Hinweis auf eine "irgendwie deutsche Ausgabe" ließe sich wie folgt verwirklichen:

    setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
    echo 'Heute ist ' . strftime('%A, der %d.%B %Y');

    Wobei setlocale je nach PHP-Version eventuell leicht anders aussehen kann. Noch schöner wäre übrigens folgende Ausgabe:

    printf(
    'Heute ist %s, der %s',
    strftime('%A'),
    strftime('%d.%B %Y')
    );

    denn damit kann man sich die ganze hässliche Stringconcatenation etwas sparen.

    Was die Anführungszeichen angeht: Durchgängig hätten in deinen Beispielen einfache ' Anführungszeichen ausgereicht. Ich persönlich finde sie auch einfacher zu lesen, da es nur ein Strich anstelle zweier ist und so den Code nicht so verwustelt. 🙂

    HTH,
    Garvin. 🙂

  3. Perun

    Hi Garvin,

    ich habe deine beiden Beispiele ausprobiert und bei mir funzen die nicht. Wo und wie muss ich deine Beispiele einbinden?

    Zu dem Semikolon: irgendwie habe ich das Gefühl, daß WP ab und an Zeichen zufügt. Denn sonst kann ich es mir nicht erklären, da ich die längeren Beispiele aus dem Editor rauskopiere.

    Als ich das erste mal diesen Beitrag abgesendet habe, hat mir WP mehr oder weniger alles zerschossen. Es sah aus wie Kraut und Rüben 🙂

  4. Martin

    Alternativ könnte man die Monate auch so anlegen:
    $monat = array(1=>'Januar','Februar','März','...','Dezember');
    Durch das 1=> wird der Januar dem Index 1 und nicht 0 zugewiesen. Möglich sind so auch Lücken, hier als Beispiel das ganze ohne Februar:
    $monat = array(1=>'Januar',3=>'März','April','...','Dezember');

Die Kommentare in diesem Beitrag sind geschlossen.

WordPress-Schulungs­unter­lagen

Anleitung für Autoren und Redakteure
Schneller und unkomplizierter Einstieg in die redaktionelle Betreuung einer WordPress-Installation.

Handbuch für Administratoren
Schneller und unkomplizierter Einstieg in die technische Betreuung einer WordPress-Installation.

Anschauen