cal_days_in_month()
Erfahren Sie, wie die PHP-Funktion cal_days_in_month() die Anzahl der Tage in einem Monat für verschiedene Kalendersysteme zurückgibt.
Die PHP-Funktion cal_days_in_month() gibt die Anzahl der Tage in einem Monat für einen bestimmten Kalender, Monat und Jahr zurück. Da sie Schaltjahre und verschiedene Kalendersysteme berücksichtigt, ist sie zuverlässiger als das manuelle Hardcodieren von Tageszahlen oder die eigene Schaltjahresberechnung. Diese Seite behandelt die Signatur, funktionierende Beispiele (einschließlich Schaltjahre und den Julianischen Kalender), häufige Fallstricke sowie die gängige Alternative, wenn die Calendar-Extension nicht verfügbar ist.
Syntax
cal_days_in_month(int $calendar, int $month, int $year): int| Parameter | Beschreibung |
|---|---|
$calendar | Zu verwendender Kalender: CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH oder CAL_FRENCH. |
$month | Monatsnummer im gewählten Kalender (1–12 für Gregorianisch/Julianisch). |
$year | Das Jahr als Ganzzahl. |
Die Funktion gibt die Anzahl der Tage als int zurück. cal_days_in_month() ist Teil der Calendar-Extension, die mit PHP mitgeliefert wird, aber aktiviert sein muss (sie ist standardmäßig bei den meisten Builds aktiviert). Wenn die Extension fehlt, existiert die Funktion nicht; siehe Ohne die Calendar-Extension weiter unten.
Grundlegende Verwendung
Übergeben Sie die Kalenderkonstante, den Monat und das Jahr:
Dies gibt There are 31 days in January 2022 aus.
Schaltjahre verarbeiten
Die Funktion berücksichtigt Schaltjahre automatisch, sodass Februar 28 oder 29 zurückgibt, ohne dass zusätzliche Logik Ihrerseits erforderlich ist:
<?php
echo cal_days_in_month(CAL_GREGORIAN, 2, 2020); // 29 — 2020 is a leap year
echo "\n";
echo cal_days_in_month(CAL_GREGORIAN, 2, 2023); // 28 — 2023 is not
?>Alle Monate eines Jahres auflisten
Eine häufige Aufgabe ist das Erstellen eines Kalenders oder eines Datumsauswahlmenüs. Iterieren Sie über die 12 Monate:
<?php
$year = 2024;
$names = ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'];
for ($month = 1; $month <= 12; $month++) {
$days = cal_days_in_month(CAL_GREGORIAN, $month, $year);
echo "{$names[$month - 1]} $year: $days days\n";
}
?>Für 2024 (ein Schaltjahr) gibt dies February 2024: 29 days aus, während jeder andere Monat seine übliche Anzahl anzeigt.
Einen anderen Kalender verwenden
Durch das Ändern des ersten Arguments wird das Kalendersystem gewechselt. Der Julianische Kalender behandelt beispielsweise 1900 als Schaltjahr, während der Gregorianische Kalender dies nicht tut:
<?php
echo cal_days_in_month(CAL_JULIAN, 2, 1900); // 29
echo "\n";
echo cal_days_in_month(CAL_GREGORIAN, 2, 1900); // 28
?>Häufige Fallstricke
- Ungültiger Monat oder Jahr: Die Übergabe eines Monats außerhalb des gültigen Bereichs (z. B.
13oder0) erzeugt eine Warnung und gibtfalsezurück, keine Tageszahl. Validieren Sie die Eingabe vor dem Aufruf. - Typ-Jonglage:
falseist locker gleich0. Verwenden Sie eine strikte Prüfung (if ($days === false)) stattif (!$days)bei der Fehlerbehandlung. - Extension-Abhängigkeit: Die Funktion existiert nur, wenn die Calendar-Extension geladen ist. Schützen Sie portablen Code mit
function_exists('cal_days_in_month').
Ohne die Calendar-Extension
Wenn die Calendar-Extension nicht verfügbar ist, liefert die DateTime-Klasse (immer verfügbar) das gleiche Gregorianische Ergebnis über das Formatzeichen t, das die Anzahl der Tage im Monat darstellt:
<?php
$date = new DateTime('2024-02-01');
echo $date->format('t'); // 29
?>Dies ist die portabelste Option für den Gregorianischen Kalender und benötigt keine zusätzliche Extension.
Fazit
cal_days_in_month() gibt die Anzahl der Tage für einen Monat in einem bestimmten Kalender und Jahr zurück und übernimmt dabei die Schaltjahr- und Mehrkalendersystem-Behandlung für Sie. Greifen Sie darauf zurück, wenn Sie mit der Calendar-Extension arbeiten oder einen nicht-gregorianischen Kalender benötigen; andernfalls ist DateTime::format('t') eine abhängigkeitsfreie Alternative.
Um mit Datumsangaben in PHP weiterzuarbeiten, lesen Sie PHP Date and Time und die Funktion checkdate() zur Validierung eines Gregorianischen Datums.
Diagramm
graph LR
A[Input Calendar Type, Month, and Year] -- cal_days_in_month --> B[Output Number of Days]