Matematica con le date in PHP

Gli argomenti di questa pagina

  • Operazioni con le date
  • Sottrarre - Aggiungere periodi temporali alla data corrente
  • Lavorare con date diverse da quella corrente
  • La differenza tra due date

Operazioni con le date

Anche con le date, come per i numeri è possibile è possibile eseguire dei semplici calcoli come aggiungere o togliere giorni, mesi, anni.
In questa pagina farò veddere solo alcuni esempi perchè l'argomento sarà ripreso nel settore dedicato. Questi che seguono sono alcuni esempi.

Sottrarre - Aggiungere periodi temporali alla data corrente

Iniziamo con dei semplici esempi.
Alla data odierna (25-09-2022) togliamo o aggiungiamo dei giorni.
Questo è un esempio che esegue i calcoli su periodi temporali prelevati esplicitamente dalla data corrente.

1
2
3
4
5
6
<?php
echo "La data odierna è " date("d-m-Y") . "<hr />\n";
echo 
"Ieri: " date ("d-m-Y",mktime(0,0,0,date("m"),date("d")-1,date("Y"))) . "<br />\n";
echo 
"Fra 20 gg: " date ("d-m-Y"mktime(0,0,0,date("m"),date("d")+20,date("Y"))) . "<br />\n";
echo 
"Fra 2 mesi: " date ("d-m-Y",mktime(0,0,0,date("m")+2,date("d"),date("Y"))) . "<br />\n";
?>
La data odierna è 25-09-2022
Ieri: 24-09-2022
Fra 20 gg: 15-10-2022
Fra 2 mesi: 25-11-2022

In questo esempio, per compiere le stesse operazioni, vengono usati i parametri month, day, year che vengono dati alla funzione PHP strtotime().
Come è visibile nell'ultimo esempio è possibile agire anche su molteplici periodi temporali.

1
2
3
4
5
6
7
8
9
10
11
<?php
echo "La data odierna è " date("d-m-Y") . "<hr />\n";
echo 
date('d/m/Y'strtotime('-1 months')) . " -> il mese scorso<br />\n";
echo 
date('d/m/Y'strtotime('+1 months')) . " -> il mese prossimo<br />\n";
echo 
date('d/m/Y'strtotime('-1 day')) . " -> Ieri<br />\n";
echo 
date('d/m/Y'strtotime('+1 day')) . " -> Domani<br />\n";
echo 
date('d/m/Y'strtotime('-1 year')) . " -> L'anno scorso<br />\n";
echo 
date('d/m/Y'strtotime('+1 year')) . " -> Il prossimo anno<br />\n";
echo 
date('d/m/Y'strtotime("+1 months 2 days 4 year")) . "
     -> fra 4 anni, 1 mese e 2 giorni<br />\n"
;
?>
La data odierna è 25-09-2022
25/08/2022 -> il mese scorso
25/10/2022 -> il mese prossimo
24/09/2022 -> Ieri
26/09/2022 -> Domani
25/09/2021 -> L'anno scorso
25/09/2023 -> Il prossimo anno
27/10/2026 -> fra 4 anni, 1 mese e 2 giorni

Lavorare con date diverse da quella corrente

In questo primo esempio, partendo da una data prestabilita, aggiungiamo 2 giorni.

1
2
3
4
5
6
<?php
$data 
"18/07/2013";
list(
$giorno$mese$anno) = preg_split('/[-\.\/: ]/'$data);
echo 
"2 giorni dopo il " $data ": ";
echo 
date ("d/m/Y"mktime(0,0,0,$mese,$giorno+2,$anno)) . "<br />\n";
?>
2 giorni dopo il 18/07/2013: 20/07/2013

In questo secondo esempio, partendo da una data prestabilita, aggiungiamo 25 giorni. Vediamo che la data restituita avanza addirittura di un mese. Questo perchè aggiungendo 25 giorni alla data di partenza verremmo ad avere una data non corretta (43/07/2013). In questo caso è l'interprete PHP ad aggiustare la data in modo da ottenere la data giusta.

1
2
3
4
5
6
<?php
$data 
"18/07/2013";
list(
$giorno$mese$anno) = preg_split('/[-\.\/: ]/'$data);
echo 
"25 giorni dopo il " $data ": ";
echo 
date ("d/m/Y"mktime(0,0,0,$mese,$giorno+25,$anno)) . "<br />\n";
?>
25 giorni dopo il 18/07/2013: 12/08/2013

Lo stesso lavoro è possibile farlo con la data corrente, come visibile negli esempi qui sotto.

1
2
3
4
5
6
<?php
echo "La data odierna è " date("d-m-Y") . "<hr />\n";
echo 
"Ieri: " date ("d-m-Y",mktime(0,0,0,date("m"),date("d")-1,date("Y"))) . "<br />\n";
echo 
"Fra 20 gg: " date ("d-m-Y"mktime(0,0,0,date("m"),date("d")+20,date("Y"))) . "<br />\n";
echo 
"Fra 2 mesi: " date ("d-m-Y",mktime(0,0,0,date("m")+2,date("d"),date("Y"))) . "<br />\n";
?>
La data odierna è 25-09-2022
Ieri: 24-09-2022
Fra 20 gg: 15-10-2022
Fra 2 mesi: 25-11-2022

La differenza tra due date

In questo esempio viene calcolata la differenza tra due date.
In questo esempio mostro due approcci leggermente diversi tra loro.

  • Nel primo script:
    • Prima eseguo le tre differenze:
      $year_diff = $end_year - $start_year;
      $month_diff = $end_month - $start_month;
      $day_diff = $end_day - $start_day;
    • Poi controllo se le differenze ottenute sui mesi e sui giorni sono inferiori a 0 (zero)
    • In questo caso sottraggo una unità alla differenza degli anni per ottenere la giusta differenza
  • Nel secondo script:
    • Eseguo la sola differenza sugli anni
    • Poi controllo se il mese o il giorno della data finale sono inferiori al mese o al giorno della data di partenza
    • In questo caso sottraggo una unità alla differenza degli anni per ottenere la giusta differenza

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
$start 
"28/04/1947";
$end date ("d/m/Y");

list(
$start_day$start_month$start_year) = preg_split('/[-\.\/: ]/'$start);
list(
$end_day$end_month$end_year) = preg_split('/[-\.\/: ]/'$end);
$year_diff $end_year $start_year
$month_diff $end_month $start_month
$day_diff $end_day $start_day
if (
$day_diff || $month_diff 0) {
    
$year_diff--; 
}
echo 
"Tra il " $start " ed il " $end " sono trascorsi " $year_diff "<br />\n";
//    ==============================================
list($start_day$start_month$start_year) = preg_split('/[-\.\/: ]/'$start);
list(
$end_day$end_month$end_year) = preg_split('/[-\.\/: ]/'$end);
$year_diff $end_year $start_year;
if (
$end_month $start_month) {
    
$year_diff--;
} elseif (
$end_day $start_day) {
    
$year_diff--;
}
echo 
"Tra il " $start " ed il " $end " sono trascorsi " $year_diff "<br />\n";
?>
Tra il 28/04/1947 ed il 25/09/2022 sono trascorsi 74
Tra il 28/04/1947 ed il 25/09/2022 sono trascorsi 74

In questo secondo esempio, utilizzando uno dei metodi sopra descritti, viene calcolata la differenza tra una data e quella corrente.
In questo caso, siccome la data finale è sicuramente la data corrente, viene evitata la creazione esplicita della data finale e si passa subito al calcolo.

1
2
3
4
5
6
7
8
9
10
11
<?php
$data 
"28/04/1947";
list(
$giorno$mese$anno) = preg_split('/[-\.\/: ]/'$data);
$eta date('Y') - $anno;
if (
date('m') <$mese) {
    
$eta--;
} elseif (
date('d') <$giorno) {
    
$eta--;
}
echo 
"Dal " $data " sono trascorsi " $eta " anni<br />\n";
?>
Dal 28/04/1947 sono trascorsi 74 anni

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum