Start · Sprachen · PHP · Referenz · datefmt_set_pattern

datefmt_set_pattern

Funktion

Setzt das ICU-Mustermuster eines <code>IntlDateFormatter</code>-Objekts, um die Formatierung von Datum und Uhrzeit individuell zu steuern.

seit PHP 5.3.0 Kategorie: string

Signatur

datefmt_set_pattern(IntlDateFormatter $formatter, string $pattern): bool

Beschreibung

datefmt_set_pattern() ist die prozedurale Variante der Methode IntlDateFormatter::setPattern() und ermöglicht es, das Formatierungsmuster eines bestehenden IntlDateFormatter-Objekts nachträglich zu ändern. Das Muster folgt der ICU-Datetime-Musternotation, wie etwa 'dd.MM.yyyy HH:mm:ss' oder 'EEEE, d. MMMM yyyy'.

Diese Funktion ist besonders nützlich, wenn ein IntlDateFormatter-Objekt bereits erstellt wurde, aber für unterschiedliche Ausgabeformate wiederverwendet werden soll, ohne jedes Mal ein neues Objekt erstellen zu müssen. So lässt sich Speicher und Initialisierungsaufwand sparen.

Das gesetzte Muster überschreibt dabei die beim Erstellen des Formatters angegebenen Datums- und Uhrzeitstile (IntlDateFormatter::FULL, SHORT usw.) vollständig. Ein zuvor gesetztes Muster kann mit datefmt_get_pattern() wieder ausgelesen werden.

  • d = Tag, M = Monat, y = Jahr
  • H = Stunde (0–23), h = Stunde (1–12), m = Minute, s = Sekunde
  • E = Wochentag (kurz/lang je nach Anzahl), z/Z = Zeitzone

Parameter

Name Typ Default Beschreibung
$formatter Pflicht IntlDateFormatter Das IntlDateFormatter-Objekt, dessen Muster geändert werden soll.
$pattern Pflicht string Das neue ICU-Datums-/Uhrzeit-Muster als Zeichenkette, z. B. 'dd.MM.yyyy HH:mm'. Ein leerer String ist ungültig und führt zu einem Fehler.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn das Muster erfolgreich gesetzt wurde, andernfalls false. Im Fehlerfall kann mit intl_get_error_message() die Fehlerursache ermittelt werden.

Beispiele

Datum im deutschen Format ausgeben

<?php
$formatter = datefmt_create(
    'de_DE',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'Europe/Berlin',
    IntlDateFormatter::GREGORIAN
);

// Muster setzen: deutsches Langformat
datefmt_set_pattern($formatter, 'EEEE, d. MMMM yyyy');

$timestamp = mktime(0, 0, 0, 12, 24, 2024);
echo datefmt_format($formatter, $timestamp);
// z. B.: Dienstag, 24. Dezember 2024
Dienstag, 24. Dezember 2024

Formatter-Objekt für mehrere Formate wiederverwenden

<?php
$formatter = datefmt_create(
    'de_DE',
    IntlDateFormatter::SHORT,
    IntlDateFormatter::SHORT,
    'Europe/Berlin',
    IntlDateFormatter::GREGORIAN
);

$timestamp = mktime(14, 30, 0, 6, 15, 2025);

// Erstes Muster: Datum und Uhrzeit
datefmt_set_pattern($formatter, 'dd.MM.yyyy HH:mm');
echo 'Datum + Uhrzeit: ' . datefmt_format($formatter, $timestamp) . PHP_EOL;

// Zweites Muster: nur Uhrzeit
datefmt_set_pattern($formatter, 'HH:mm:ss');
echo 'Nur Uhrzeit:     ' . datefmt_format($formatter, $timestamp) . PHP_EOL;

// Aktuelles Muster ausgeben
echo 'Aktuelles Muster: ' . datefmt_get_pattern($formatter) . PHP_EOL;
Datum + Uhrzeit: 15.06.2025 14:30 Nur Uhrzeit: 14:30:00 Aktuelles Muster: HH:mm:ss

// Wichtig · Fallstricke

Musterzeichen sind fallsensitiv und mengenabhängig: M steht für Monat numerisch (ein- oder zweistellig), MM für zweistellig, MMM für abgekürzten Monatsnamen und MMMM für den vollständigen Namen. Falsch gesetzte Muster können zu unerwarteten oder leeren Ausgaben führen.

Ungültige Musterzeichenketten werden von der ICU-Bibliothek abgelehnt; die Funktion gibt dann false zurück und setzt einen internen Fehler. Dieser kann mit intl_get_error_code() und intl_get_error_message() abgefragt werden.

Das Setzen eines Musters hat keinen Einfluss auf die beim Erstellen des Formatters gewählte Locale oder Zeitzone — diese bleiben unverändert.