Start · Sprachen · PHP · Referenz · IntlGregorianCalendar

IntlGregorianCalendar

Klasse

Repräsentiert einen gregorianischen Kalender innerhalb der <code>intl</code>-Erweiterung für internationale Datums- und Zeitoperationen.

seit PHP 5.5.0 Kategorie: string

Signatur

class IntlGregorianCalendar extends IntlCalendar

Beschreibung

IntlGregorianCalendar ist eine Unterklasse von IntlCalendar und implementiert den gregorianischen Kalender, wie er in weiten Teilen der Welt als ziviler Standard verwendet wird. Die Klasse ermöglicht internationale, locale-bewusste Datums- und Zeitberechnungen, die über die einfache PHP-Funktion date() oder DateTime hinausgehen.

Im Vergleich zu IntlCalendar bietet IntlGregorianCalendar zusätzlich die Möglichkeit, den Umstellungszeitpunkt zwischen julianischem und gregorianischem Kalender (den sogenannten Gregorian Change) festzulegen und abzufragen. Außerdem kann geprüft werden, ob ein bestimmtes Jahr ein Schaltjahr (Leap Year) ist.

Typischerweise wird IntlGregorianCalendar verwendet, wenn man mit ICU-basierten Datums-/Zeit-Formatierern wie IntlDateFormatter zusammenarbeitet, oder wenn man Zeitzonen- und Kalenderberechnungen auf Basis von Locale-Einstellungen durchführen muss.

Instanzen können entweder über den Konstruktor oder über die statische Methode IntlGregorianCalendar::createInstance() erzeugt werden. Für einfache Anwendungsfälle mit dem gregorianischen Standard-Kalender ist IntlCalendar::createInstance() eine Alternative.

Parameter

Name Typ Default Beschreibung
$timezone IntlTimeZone|DateTimeZone|string|null null Die zu verwendende Zeitzone. Kann ein IntlTimeZone-Objekt, ein DateTimeZone-Objekt oder ein Zeitzonenstring (z. B. 'Europe/Berlin') sein. Bei null wird die Standard-Zeitzone verwendet.
$locale string|null null Das Locale als BCP-47-String (z. B. 'de_DE'). Bei null wird das Standard-Locale aus der INI-Einstellung intl.default_locale verwendet.

Rückgabewert

Typ

Beispiele

Gregorianischen Kalender erstellen und aktuelles Datum abfragen

<?php
$cal = new IntlGregorianCalendar(IntlTimeZone::createTimeZone('Europe/Berlin'), 'de_DE');

// Aktuelles Jahr, Monat und Tag ausgeben
$year  = $cal->get(IntlCalendar::FIELD_YEAR);
$month = $cal->get(IntlCalendar::FIELD_MONTH) + 1; // Monate sind 0-basiert
$day   = $cal->get(IntlCalendar::FIELD_DAY_OF_MONTH);

echo "Aktuelles Datum (gregorianisch): {$day}.{$month}.{$year}\n";
Aktuelles Datum (gregorianisch): 15.6.2025

Schaltjahr prüfen und Gregorian Change auslesen

<?php
$cal = new IntlGregorianCalendar();

// Schaltjahre prüfen
foreach ([2000, 1900, 2024, 2023] as $year) {
    $isLeap = $cal->isLeapYear($year);
    echo "{$year} ist " . ($isLeap ? '' : 'kein ') . "Schaltjahr.\n";
}

// Umstellungspunkt vom julianischen auf den gregorianischen Kalender
$changeDate = $cal->getGregorianChange();
echo "Gregorian Change (Unix-Timestamp): " . $changeDate . "\n";

// Eigenen Gregorian Change setzen (historische Simulation)
$cal->setGregorianChange(PHP_INT_MIN); // Immer gregorianisch
echo "Neuer Gregorian Change: " . $cal->getGregorianChange() . "\n";
2000 ist ein Schaltjahr. 1900 ist kein Schaltjahr. 2024 ist ein Schaltjahr. 2023 ist kein Schaltjahr. Gregorian Change (Unix-Timestamp): -12219292800 Neuer Gregorian Change: -9.2233720368548E+18

Zusammenarbeit mit IntlDateFormatter

<?php
$cal = new IntlGregorianCalendar(IntlTimeZone::createTimeZone('Europe/Berlin'), 'de_DE');
$cal->set(2025, 0, 1); // 1. Januar 2025 (Monate 0-basiert)

$formatter = new IntlDateFormatter(
    'de_DE',
    IntlDateFormatter::LONG,
    IntlDateFormatter::NONE,
    'Europe/Berlin',
    IntlDateFormatter::GREGORIAN
);

echo $formatter->formatObject($cal) . "\n";
1. Januar 2025

// Wichtig · Fallstricke

Monate sind 0-basiert: In IntlCalendar und damit auch in IntlGregorianCalendar beginnen die Monate bei 0 (Januar = 0, Dezember = 11). Das führt häufig zu Off-by-one-Fehlern, wenn man Werte aus PHP-DateTime direkt überträgt.

Gregorian Change: Standardmäßig ist der Umstellungspunkt auf den 15. Oktober 1582 gesetzt. Mit setGregorianChange() kann dieser geändert werden, z. B. für historische Simulationen. Das Setzen auf PHP_INT_MIN erzwingt immer den gregorianischen Kalender.

Erweiterung erforderlich: Die intl-Erweiterung muss in PHP aktiviert sein (meistens via extension=intl in der php.ini). Die ICU-Bibliotheksversion beeinflusst das Verhalten bei historischen Daten und Lokalisierungen.