Signatur
Beschreibung
datefmt_set_calendar() ist die prozedurale Variante von IntlDateFormatter::setCalendar() und ermöglicht es, den Kalendertyp eines bestehenden Datum-/Uhrzeit-Formatters nachträglich zu ändern. Als Kalender kann entweder eine der IntlDateFormatter::CALENDAR_*-Konstanten (GREGORIAN oder TRADITIONAL) oder ein vollständiges IntlCalendar-Objekt übergeben werden.
Wird ein IntlCalendar-Objekt übergeben, übernimmt der Formatter dessen Zeitzone und Gebietsschema (Locale) – was besonders nützlich ist, wenn spezifische Kalendersysteme wie der islamische, hebräische oder japanische Kaiserkalender verwendet werden sollen. Wird null übergeben, wird der Kalender anhand des Locales des Formatters neu erstellt.
Die Funktion wird typischerweise dann eingesetzt, wenn ein bereits erzeugter IntlDateFormatter für einen anderen Kalenderkontext wiederverwendet werden soll, ohne ihn komplett neu erzeugen zu müssen. Dies spart Ressourcen und vereinfacht den Code in mehrsprachigen Anwendungen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $formatter Pflicht | IntlDateFormatter | Das IntlDateFormatter-Objekt, dessen Kalender geändert werden soll. |
|
| $calendar Pflicht | IntlCalendar|int|null | Der neue Kalender. Erlaubt sind: ein IntlCalendar-Objekt, die Konstante IntlDateFormatter::GREGORIAN, IntlDateFormatter::TRADITIONAL oder null, um den Kalender anhand des Locales neu zu erstellen. |
Rückgabewert
true bei Erfolg zurück, false bei einem Fehler (z. B. wenn ein ungültiger Wert übergeben wurde).Beispiele
Kalendertyp auf TRADITIONAL umstellen
<?php
$fmt = datefmt_create(
'fa_IR',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'Asia/Tehran',
IntlDateFormatter::GREGORIAN
);
echo 'Kalender vor Änderung: ' . datefmt_get_calendar($fmt) . PHP_EOL;
// Wechsel auf traditionellen (persischen) Kalender
datefmt_set_calendar($fmt, IntlDateFormatter::TRADITIONAL);
echo 'Kalender nach Änderung: ' . datefmt_get_calendar($fmt) . PHP_EOL;
echo datefmt_format($fmt, time()) . PHP_EOL;
IntlCalendar-Objekt (islamischer Kalender) setzen
<?php
$fmt = datefmt_create(
'ar_SA',
IntlDateFormatter::FULL,
IntlDateFormatter::NONE,
'Asia/Riyadh',
IntlDateFormatter::GREGORIAN
);
// Islamischen Kalender erzeugen und dem Formatter zuweisen
$islamicCal = IntlCalendar::createInstance('Asia/Riyadh', '@calendar=islamic-civil');
datefmt_set_calendar($fmt, $islamicCal);
echo datefmt_format($fmt, mktime(0, 0, 0, 5, 6, 2025)) . PHP_EOL;
// Wichtig · Fallstricke
Achtung: Nach dem Setzen eines IntlCalendar-Objekts übernimmt der Formatter intern eine Kopie des Kalenders – spätere Änderungen am Original-Objekt wirken sich nicht auf den Formatter aus.
Wird ein ganzzahliger Wert übergeben, der weder IntlDateFormatter::GREGORIAN (1) noch IntlDateFormatter::TRADITIONAL (0) entspricht, schlägt die Funktion fehl und gibt false zurück. Fehler können anschließend mit datefmt_get_error_code() und datefmt_get_error_message() abgerufen werden.
Diese Funktion ist identisch mit der Methode IntlDateFormatter::setCalendar() – beide Schreibweisen sind gleichwertig.