Kalender Widget mit Überstzung
Da PHP auf dem Server läuft, ist unser Projekt von dessen Konfiguration abhängig. Dies zeigt sich insbesondere bei der Verwendung von Formatierungen, zum Beispiel für Datums-Strings. Datum und Zeit mögen korrekt sein, werden aber nur in Englisch ausgegeben?
Hier können wir mit einer PHP Extension arbeiten, die auch auf deinem Testserver aktiviert werden können - sie heisst IntlDateFormatter und ist Teil der Internationalization (Intl) Erweiterung von PHP. Mit IntlDateFormatter kannst du z.B. ein Datum in verschiedenen Sprachen und Formaten ausgeben, ohne den zugrunde liegenden Code zu ändern.
Sie ist als Klasse organisiert, das heisst, wir greifen auf ein schon vordefiniertes Objekt und dessen Methoden (Funktionen) zu. Objekte können unterschiedliche Formen annehmen, was die Flexibilität und Anpassungsfähigkeit des Codes erhöht. Du musst das Konzept von OOP (objektorientierter Programmierung) aber nicht in allen Details verstehen, um die praktische Funktionalität zu nutzen. Beachte vorerst einfach die etwas andere Vorgehensweise.
Wir verwenden in diesem Beispiel die Klasse DateTime sowie die Klasse IntlDateFormatter. Anders als im prozeduralen Code, wo wir einfach Funktionen aufrufen, erstellen wir erst ein Objekt (Instanz).
// Das DateTime Objekt wird erstellt
$date = new DateTime('2024-09-05'); // Irgendein Datum
$date = new DateTime('now'); // aktuelles Datum
Bei IntlDateFormatter sieht die Instanzierung dann so aus:
// Parameter von IntlDateFormatter als Variable speichern und den Code so kurz halten:
$format = IntlDateFormatter::FULL; // Länge des Kompletten Datum/Zeitstrings
$lang = 'de_DE'; // bestimmt die lokale Umgebung (Sprache/Region)
// Objekt instanzieren
$dayFormatter = new IntlDateFormatter($lang, $format, $format);
Wir können den DateFormatter nun auch verwenden, um nur einzelne Informationen zu formatieren, zum Beispiel den Wochentag.
// Instanzierung eines Formatierungsobjekts für die Ausgabe des Wochentags (String 'EEEE')
$dayFormatter = new IntlDateFormatter($lang, $format, $format, null, null, 'EEEE');
So geht's
- Lade die Datei kalender-1.zip herunter und öffne das HTML-File darin
- Speichere kalender_vorlage.html als kalender_vorlage.php ab, damit Du darin PHP ausführen kannst
- Bereite nun dein Script für den DateFormatter vor
// Formatter konfigurieren $format = IntlDateFormatter::NONE; // hat hier keine Auswirkung $language = 'de_DE'; // bestimmt die lokale Umgebung (Sprache/Region) - Erstelle dann auch noch ein DateTime Objekt, um die aktuelle Datumsinformation zu erhalten
// DateTime-Objekt erstellen $date = new DateTime('now'); - Rufe die Datei im Browser auf und betrachte sie: es sind 4 Datumswerte enthalten
- Erstelle nun einen DateFormatter für den Wochentag
// Format-Objekt für den Wochentag $dayFormatter = new IntlDateFormatter($language, $format, $format, null, null, 'EEEE'); - Gebe den formatierten Datumswert nun im bestehenden HTML aus, indem Du den DayFormatter verwendest:
wird zu:<h2>Montag</h2>
<h2><?php echo $dayFormatter->format($date); ?></h2> - Verfahre nun genau gleich für den Tag des Monats, Monat und Jahr
Tips und Links
Hier findest du eine Tabelle mit den möglichen Formaten für den IntlDateFormatter:
https://unicode-org.github.io/icu/userguide/format_parse/datetime
Verstehen, wie PHP mit HTML zusammen funktioniert