Nello sviluppo di applicazioni web in PHP capita spesso di avere la necessità di calcolare la differenza tra due date.
Per questo scopo creiamo una funzione personalizzata “dateDiff”, alla quale passiamo come parametri le due date per le quali vogliamo calcolare la differenza.
Abbiamo a disposizione la classe DateTime disponibile dalla versione 5.2 di PHP e attraverso il metodo diff() possiamo effettuare il calcolo:
<?php function dateDiff($date1,$date2,$format) { $datetime1 = new DateTime($date1); $datetime2 = new DateTime($date2); $interval = $datetime1->diff($datetime2); return $interval->format($format); } //la data attuale $date1="2014-10-23"; $date2="2014-11-15"; $format="%a"; echo dateDiff($date1,$date2,$format); ?>
In questo caso la funzione ritorna 23 giorni come differenza.
Il parametro “%a” del metodo format specifica di restituire il formato della differenza in giorni.
Come possiamo vedere dal codice le date sono nel formato americano, apportiamo una piccola modifica al codice per calcolare la differenza fra due date dal formato europeo:
<?php function dateDiff($date1,$date2,$format) { $datetime1 = new DateTime($date1); $datetime2 = new DateTime($date2); $interval = $datetime1->diff($datetime2); return $interval->format($format); } //funzione che converte la data nel formato yyyy-mm-dd function convertToAmericanFormat($data) { $data= str_replace('/', '-', $data); return date('Y-m-d', strtotime($data)); } $date1=convertToAmericanFormat("23/10/2014"); $date2=convertToAmericanFormat("15/11/2014"); $format="%a"; echo dateDiff($date1,$date2,$format); ?>
Nella seconda funzione aggiunta al codice abbiamo utilizzato rispettivamente strtotime() e date().
La prima ci restituisce il “timestamp” corrispondente alla data passata; mentre la seconda ci restituisce la data, in base al formato di formattazione specificato ed il valore del “timestamp”.