W3docs

cal_days_in_month()

Scopri come usare cal_days_in_month() in PHP per ottenere il numero di giorni in un mese, con esempi pratici sugli anni bisestili e i calendari.

La funzione PHP cal_days_in_month() restituisce il numero di giorni in un mese per un dato calendario, mese e anno. Poiché gestisce automaticamente gli anni bisestili e i diversi sistemi di calendario, è più affidabile rispetto al codifica fissa dei conteggi dei giorni o al calcolo manuale degli anni bisestili. Questa pagina tratta la sua firma, esempi funzionanti (inclusi gli anni bisestili e il calendario giuliano), le insidie comuni e l'alternativa quotidiana quando l'estensione Calendar non è disponibile.

Sintassi

cal_days_in_month(int $calendar, int $month, int $year): int
ParametroDescrizione
$calendarCalendario da usare: CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH o CAL_FRENCH.
$monthNumero del mese nel calendario scelto (112 per gregoriano/giuliano).
$yearL'anno, come intero.

Restituisce il numero di giorni come int. cal_days_in_month() fa parte dell'estensione Calendar, inclusa con PHP ma che deve essere abilitata (lo è per impostazione predefinita nella maggior parte delle build). Se l'estensione è assente, la funzione non esiste; vedi Senza l'estensione Calendar di seguito.

Utilizzo di base

Passa la costante del calendario, il mese e l'anno:

php— editable, runs on the server

Questo stampa There are 31 days in January 2022.

Gestione degli anni bisestili

La funzione tiene conto automaticamente degli anni bisestili, quindi febbraio restituisce 28 o 29 senza alcuna logica aggiuntiva da parte tua:

<?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
?>

Elenco di tutti i mesi di un anno

Un'operazione comune è la creazione di un calendario o di un menu a tendina per le date. Itera sui 12 mesi:

<?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";
}
?>

Per il 2024 (un anno bisestile) questo stampa February 2024: 29 days, mentre ogni altro mese mostra il conteggio consueto.

Utilizzo di un calendario diverso

Cambiando il primo argomento si modifica il sistema di calendario. Il calendario giuliano, ad esempio, tratta il 1900 come anno bisestile, mentre il calendario gregoriano non lo fa:

<?php
echo cal_days_in_month(CAL_JULIAN, 2, 1900);    // 29
echo "\n";
echo cal_days_in_month(CAL_GREGORIAN, 2, 1900); // 28
?>

Insidie comuni

  • Mese o anno non valido: passare un mese fuori dall'intervallo valido (ad esempio 13 o 0) genera un avviso e restituisce false, non un conteggio di giorni. Valida l'input prima di chiamare la funzione.
  • Type juggling: false è liberamente uguale a 0. Usa un controllo rigoroso (if ($days === false)) anziché if (!$days) quando gestisci gli errori.
  • Dipendenza dall'estensione: la funzione esiste solo quando l'estensione Calendar è caricata. Usa function_exists('cal_days_in_month') nel codice portabile come guardia.

Senza l'estensione Calendar

Se l'estensione Calendar non è disponibile, la classe DateTime (sempre disponibile) fornisce lo stesso risultato gregoriano tramite il carattere di formato t, che rappresenta il numero di giorni nel mese:

<?php
$date = new DateTime('2024-02-01');
echo $date->format('t'); // 29
?>

Questa è l'opzione più portabile per il calendario gregoriano e non richiede estensioni aggiuntive.

Conclusione

cal_days_in_month() restituisce il conteggio dei giorni per un mese in un dato calendario e anno, gestendo per te gli anni bisestili e i sistemi di calendario multipli. Usala quando lavori con l'estensione Calendar o hai bisogno di un calendario non gregoriano; altrimenti DateTime::format('t') è un'alternativa senza dipendenze.

Per continuare a lavorare con le date in PHP, consulta PHP Date and Time e la funzione checkdate() per la validazione di una data gregoriana.

Diagramma

graph LR
A[Input Calendar Type, Month, and Year] -- cal_days_in_month --> B[Output Number of Days]

Esercizio

Pratica
Cosa fa la funzione cal_days_in_month() in PHP?
Cosa fa la funzione cal_days_in_month() in PHP?
Was this page helpful?