Start · Sprachen · PHP · Referenz · IntlDatePatternGenerator

IntlDatePatternGenerator

Klasse

Erzeugt lokalisierte Datumsmuster aus Skeleton-Angaben für die Verwendung mit <code>IntlDateFormatter</code>.

seit PHP 8.1.0 Kategorie: string

Signatur

class IntlDatePatternGenerator

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

Typ

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;
}
de_DE: d. MMM y en_US: MMM d, y ja_JP: y年M月d日 fr_FR: d MMM y

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);
14. Juli 2023

// 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.