cal_days_in_month()
Apprenez à utiliser cal_days_in_month() en PHP pour obtenir le nombre de jours dans un mois selon le calendrier, le mois et l'année spécifiés.
La fonction PHP cal_days_in_month() retourne le nombre de jours dans un mois pour un calendrier, un mois et une année donnés. Parce qu'elle gère les années bissextiles et les différents systèmes de calendriers, elle est plus fiable que de coder en dur le nombre de jours ou de faire le calcul des années bissextiles manuellement. Cette page couvre sa signature, des exemples pratiques (y compris les années bissextiles et le calendrier julien), les pièges courants, ainsi que l'alternative au quotidien lorsque l'extension Calendar n'est pas disponible.
Syntaxe
cal_days_in_month(int $calendar, int $month, int $year): int| Paramètre | Description |
|---|---|
$calendar | Calendrier à utiliser : CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH ou CAL_FRENCH. |
$month | Numéro du mois dans le calendrier choisi (1–12 pour grégorien/julien). |
$year | L'année, sous forme d'entier. |
Elle retourne le nombre de jours sous forme d'int. cal_days_in_month() fait partie de l'extension Calendar, qui est fournie avec PHP mais doit être activée (elle l'est par défaut sur la plupart des versions). Si l'extension est absente, la fonction n'existe pas ; voir Sans l'extension Calendar ci-dessous.
Utilisation de base
Passez la constante du calendrier, le mois et l'année :
Cela affiche There are 31 days in January 2022.
Gestion des années bissextiles
La fonction gère automatiquement les années bissextiles, ainsi février retourne 28 ou 29 sans aucune logique supplémentaire de votre part :
<?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
?>Lister tous les mois d'une année
Une tâche courante consiste à construire un calendrier ou un menu déroulant de dates. Parcourez les 12 mois en boucle :
<?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";
}
?>Pour 2024 (une année bissextile), cela affiche February 2024: 29 days, tandis que chaque autre mois affiche son nombre habituel.
Utiliser un calendrier différent
Changer le premier argument modifie le système de calendrier. Le calendrier julien, par exemple, considère 1900 comme une année bissextile alors que le calendrier grégorien ne le fait pas :
<?php
echo cal_days_in_month(CAL_JULIAN, 2, 1900); // 29
echo "\n";
echo cal_days_in_month(CAL_GREGORIAN, 2, 1900); // 28
?>Pièges courants
- Mois ou année invalide : passer un mois hors de la plage valide (par exemple
13ou0) génère un avertissement et retournefalse, et non un nombre de jours. Validez les entrées avant d'appeler la fonction. - Conversion de type :
falseest globalement égal à0. Utilisez une vérification stricte (if ($days === false)) plutôt queif (!$days)lors de la gestion des erreurs. - Dépendance à l'extension : la fonction n'existe que si l'extension Calendar est chargée. Protégez votre code portable avec
function_exists('cal_days_in_month').
Sans l'extension Calendar
Si l'extension Calendar n'est pas disponible, la classe DateTime (toujours disponible) donne le même résultat grégorien via le caractère de format t, qui représente le nombre de jours dans le mois :
<?php
$date = new DateTime('2024-02-01');
echo $date->format('t'); // 29
?>C'est l'option la plus portable pour le calendrier grégorien et ne nécessite aucune extension supplémentaire.
Conclusion
cal_days_in_month() retourne le nombre de jours d'un mois dans un calendrier et une année donnés, en gérant pour vous les années bissextiles et les multiples systèmes de calendriers. Utilisez-la lorsque vous travaillez avec l'extension Calendar ou que vous avez besoin d'un calendrier non grégorien ; sinon, DateTime::format('t') est une alternative sans dépendance.
Pour continuer à travailler avec les dates en PHP, consultez PHP Date and Time et la fonction checkdate() pour valider une date grégorienne.
Diagramme
graph LR
A[Input Calendar Type, Month, and Year] -- cal_days_in_month --> B[Output Number of Days]