Durante lo sviluppo di specifici report contabili mi capitò di aver necessità di calcolare e ottenere tutti i giorni di uno specifico mese con del codice PHP. Questo script mi serviva per mostrare gli importi corrispondenti ad ogni giorno del mese corrente o ad un altro mese dell’anno; provai vari script presi online ma che non mi soddisfaranno appieno.
Dunque, decisi di svilupparne uno io più efficiente e di semplice utilizzo, che mostrerò in questo articolo in modo che chiunque possa usufruirne.
Calcolare e stampare tutti i giorni di un mese con PHP
Lo scopo dello script PHP che ho sviluppato è quello di mostrare/stampare (su schermo, con echo
) tutti i giorni di uno specifico mese dell’anno, dal primo all’ultimo.
Il problema principale si presentò con il rilevamento dell’ultimo giorno di un mese, risolto con questa guida[…], dopo di ciò, inserire ogni giorno in una tabella o lista HTML e associare di conseguenza un valore.
Le variabili
Come primo passo, definiamo le variabili PHP:
//Definisco le variabili data
$anno = "2023";
$mese= "01";
//Definisco il primo e l'ultimo giorno del mese
$primoGiorno = date("Y-m-d", strtotime($anno."-".$mese."-01") ); // 1
$ultimoGiorno= date("d", strtotime(date("Y-m-t", strtotime($primoGiorno)))); // 31
Le variabili sopra definiscono la data da analizzare (anno e mese), e di conseguenza il primo e ultimo giorno di quel mese.
Nota: Nella variabile $ultimoGiorno
facciamo uso del parametro t
, che equivale al conteggio dei giorni del mese selezionato.
Nel caso avessimo bisogno di rilevare i giorni del mese corrente, le variabili sono da usare sono:
$anno = date("Y"); // anno corrente es. 2022
$mese = date("m"); // mese corrente es. 03
Stampa dei giorni
Ora, per stampare / mostrare tutti i giorni del mese selezionato, dal primo all’ultimo, ci basterà eseguire un ciclo (o loop) di tipo for
in questo modo.
for($i = 1; $i <= $ultimoGiorno; $i+=1){
$dataCorrente = date("Y-m-d", strtotime($anno."-".$mese."-".$i));
echo $dataCorrente;
echo "<br>";
}
Per ogni iterazione del ciclo for, generiamo la variabile PHP locale $dataCorrente
, cioè la data che in quel momento il ciclo sta elaborando, e la mostriamo su schermo con echo
.
Il risultato mostrerà tutti i giorni di quel mese dal primo all’ultimo.
Puoi gestire facilmente i giorni da mostrare cambiando il range del ciclo, aumentando il valore di partenza della variabile $i
ad esempio.
Utile anche il confronto con la data attuale:
for($i = 1; $i <= $ultimoGiorno; $i+=1){
$dataCorrente = date("Y-m-d", strtotime($anno."-".$mese."-".$i));
if ($dataCorrente == date("Y-m-d")){
echo "Oggi";
}else{
echo $dataCorrente;
}
echo "<br>";
}
Perché il ciclo for? Ho testato personalmente altri metodi, alcuni con while loop con cui ho ottenuto risultati simili. Tuttavia trovo la gestione di un ciclo for molto più semplice e di facile comprensione anche per principianti, considerando che un ciclo for funziona semplicemente con un range numerico (da 1 a 31).
Codice completo
Qui in basso il codice completo:
//Definisco le variabili data
$anno = "2023";
$mese= "01";
//Definisco il primo e l'ultimo giorno del mese
$primoGiorno = date("Y-m-d", strtotime($anno."-".$mese."-01") ); // 1
$ultimoGiorno= date("d", strtotime(date("Y-m-t", strtotime($primoGiorno)))); // 31
for($i = 1; $i <= $ultimoGiorno; $i+=1){
$dataCorrente = date("Y-m-d", strtotime($anno."-".$mese."-".$i));
echo $dataCorrente; // in alternativa usa $i per mostrare solo il giorno
echo "<br>";
}