Signatur
Beschreibung
datefmt_get_calendar_object() ist die prozedurale Variante von IntlDateFormatter::getCalendarObject() und liefert eine unabhängige Kopie des IntlCalendar-Objekts, das intern vom übergebenen Formatter verwendet wird. Da es sich um eine Kopie handelt, wirken sich Änderungen daran nicht auf den Formatter selbst aus.
Diese Funktion ist nützlich, wenn man Detailinformationen über den Kalender des Formatters benötigt – etwa die Zeitzone, den Kalendertyp (gregorianisch, islamisch, buddhistisch usw.) oder den aktuellen internen Zeitstempel – ohne den Formatter zu verändern.
Der Unterschied zu datefmt_get_calendar() besteht darin, dass letztere lediglich eine Integer-Konstante (z. B. IntlDateFormatter::GREGORIAN) zurückgibt, während datefmt_get_calendar_object() das vollständige IntlCalendar-Objekt liefert, auf dem alle Kalender-Methoden aufgerufen werden können.
Gibt null zurück, wenn kein Kalender gesetzt wurde, und false bei einem Fehler.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $formatter Pflicht | IntlDateFormatter | Das IntlDateFormatter-Objekt, von dem das Kalenderobjekt abgerufen werden soll. |
Rückgabewert
IntlCalendar-Objekts zurück. Gibt null zurück, wenn kein Kalender gesetzt ist, und false bei einem Fehler.Beispiele
Kalendertyp und Zeitzone des Formatters ermitteln
<?php
$formatter = datefmt_create(
'de_DE',
IntlDateFormatter::FULL,
IntlDateFormatter::FULL,
'Europe/Berlin',
IntlDateFormatter::GREGORIAN
);
$calendar = datefmt_get_calendar_object($formatter);
if ($calendar !== false && $calendar !== null) {
echo 'Zeitzone: ' . $calendar->getTimeZone()->getID() . PHP_EOL;
echo 'Typ: ' . get_class($calendar) . PHP_EOL;
}
Aktuelles Datum im Kalender des Formatters prüfen
<?php
$formatter = datefmt_create(
'fa_IR@calendar=persian',
IntlDateFormatter::FULL,
IntlDateFormatter::NONE,
'Asia/Tehran',
IntlDateFormatter::TRADITIONAL
);
$cal = datefmt_get_calendar_object($formatter);
if ($cal !== false && $cal !== null) {
$cal->setTime(time() * 1000); // Millisekunden
$year = $cal->get(IntlCalendar::FIELD_YEAR);
$month = $cal->get(IntlCalendar::FIELD_MONTH) + 1; // 0-basiert
$day = $cal->get(IntlCalendar::FIELD_DAY_OF_MONTH);
echo "Persisches Datum: $year/$month/$day" . PHP_EOL;
}
// Wichtig · Fallstricke
Kopie, keine Referenz: Das zurückgegebene IntlCalendar-Objekt ist eine unabhängige Kopie. Änderungen daran haben keinen Einfluss auf den Formatter.
Zeitangaben in Millisekunden: Die Methoden von IntlCalendar wie setTime() erwarten Millisekunden seit der Unix-Epoche, nicht Sekunden. Daher muss der Rückgabewert von time() mit 1000 multipliziert werden.
Diese Funktion erfordert die intl-Erweiterung (ext-intl), die in den meisten PHP-Installationen verfügbar, aber nicht immer standardmäßig aktiviert ist.