Signatur
Beschreibung
IntlDatePatternGenerator ermöglicht es, für ein bestimmtes Gebietsschema (Locale) ein optimales Datumsformatierungsmuster zu ermitteln, ohne das genaue Muster explizit kennen zu müssen. Stattdessen übergibt man ein sogenanntes Skeleton – eine Zeichenkette, die angibt, welche Felder (z. B. Jahr, Monat, Tag) im Ergebnis enthalten sein sollen – und die Klasse liefert das für das jeweilige Locale passende Muster zurück.
Ein Skeleton ist dabei keine feste Formatzeichenkette, sondern eine Zusammenstellung von Feldbezeichnern wie yMd (Jahr, Monat, Tag) oder yMMMd (Jahr, abgekürzter Monatsname, Tag). Die Klasse analysiert diese Angabe und bestimmt auf Basis der ICU-Regeln das kulturell korrekte Muster für das gewählte Gebietsschema.
Dies ist besonders nützlich, wenn eine Anwendung international eingesetzt wird und das Datumsformat automatisch an den Benutzer angepasst werden soll, ohne für jedes Locale manuell ein Muster pflegen zu müssen. Das resultierende Muster kann anschließend an IntlDateFormatter übergeben werden.
Die Klasse ist Teil der Intl-Erweiterung und erfordert, dass die ICU-Bibliothek in PHP verfügbar ist. Sie ist mit PHP 8.1 eingeführt worden und basiert auf der ICU-Klasse DateTimePatternGenerator.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $locale Pflicht | string | Das Gebietsschema (z. B. 'de_DE', 'en_US'), für das der Pattern-Generator erstellt wird. Bestimmt die kulturellen Regeln für Datumsformate. |
Rückgabewert
Beispiele
Lokalisiertes Datumsmuster für verschiedene Locales erzeugen
<?php
// Skeleton: Jahr (y), abgekürzter Monat (MMM), Tag (d)
$skeleton = 'yMMMd';
$locales = ['de_DE', 'en_US', 'ja_JP', 'fr_FR'];
foreach ($locales as $locale) {
$generator = new IntlDatePatternGenerator($locale);
$pattern = $generator->getBestPattern($skeleton);
echo $locale . ': ' . $pattern . PHP_EOL;
}
Muster mit IntlDateFormatter kombinieren
<?php
$locale = 'de_DE';
$skeleton = 'yMMMd';
$generator = new IntlDatePatternGenerator($locale);
$pattern = $generator->getBestPattern($skeleton);
$formatter = new IntlDateFormatter(
$locale,
IntlDateFormatter::NONE,
IntlDateFormatter::NONE,
'Europe/Berlin',
IntlDateFormatter::GREGORIAN,
$pattern
);
$timestamp = mktime(0, 0, 0, 7, 14, 2023);
echo $formatter->format($timestamp);
// Wichtig · Fallstricke
PHP-Version: IntlDatePatternGenerator ist erst ab PHP 8.1.0 verfügbar. Bei älteren PHP-Versionen kann ein manueller Einsatz von IntlDateFormatter mit fest codierten Mustern notwendig sein.
Skeleton vs. Muster: Ein Skeleton wie yMd ist keine direkte Formatanweisung, sondern eine Beschreibung der gewünschten Felder. Die tatsächliche Reihenfolge und Trennzeichen werden durch das Locale bestimmt. Skelette sollten keine Trennzeichen enthalten.
ICU-Abhängigkeit: Das Ergebnis hängt von der installierten ICU-Version ab. Unterschiedliche ICU-Versionen können leicht abweichende Muster liefern. Dies kann in containerisierten Umgebungen zu Inkonsistenzen führen.
Fehlerbehandlung: Wenn ein ungültiges Locale übergeben wird, kann die Erzeugung des Objekts fehlschlagen. Es empfiehlt sich, intl_get_error_code() und intl_get_error_message() zur Fehlerdiagnose zu verwenden.