Link sponsorizzati

Differenza tra date in PHP: creiamo la funzione DateDiff

Articolo scritto da Luca Ruggiero

Il PHP non dispone nativamente della funzione datediff, funzione predefinita dell'ASP (VBScript) che permette di calcolare la differenza tra due date.

Questo tipo di funzione è molto utile per stabilire il tempo trascorso, ad esempio, da una data del passato e la data odierna, stabilendo l'intervallo temporale secondo le proprie esigenze, ad esempio in anni, mesi, settimane, giorni, ore, minuti, secondi, e cosi via.

(L'articolo continua più sotto...)

La funzione personalizzata che creeremo si chiamerà proprio datediff ed accetterà tre parametri:

datediff(tipo_intervallo, data_partenza, data_finale)
Il primo parametro ci permetterà di specificare, secondo delle convenzioni che stabiliremo a priori, se la differenza tra le date dev'essere calcolata in anni, mesi, settimane, giorni, dato che è difficile avere l'esigenza di calcolare un intervallo tra date espresso in ore, minuti o secondi.

Il secondo parametro permette di specificare la data di partenza (ad esempio la nostra data di nascita), mentre il terzo parametro accetterà la data finale (ad esempio la data di oggi).

Vediamo il codice della nostra funzione personalizzata datediff in PHP:

<?PHP
    function datediff($tipo, $partenza, $fine)
    {
        switch ($tipo)
        {
            case "A" : $tipo = 365;
            break;
            case "M" : $tipo = (365 / 12);
            break;
            case "S" : $tipo = (365 / 52);
            break;
            case "G" : $tipo = 1;
            break;
        }
        $arr_partenza = explode("/", $partenza);
        $partenza_gg = $arr_partenza[0];
        $partenza_mm = $arr_partenza[1];
        $partenza_aa = $arr_partenza[2];
        $arr_fine = explode("/", $fine);
        $fine_gg = $arr_fine[0];
        $fine_mm = $arr_fine[1];
        $fine_aa = $arr_fine[2];
        $date_diff = mktime(12, 0, 0, $fine_mm, $fine_gg, $fine_aa) - mktime(12, 0, 0, $partenza_mm, $partenza_gg, $partenza_aa);
        $date_diff  = floor(($date_diff / 60 / 60 / 24) / $tipo);
        return $date_diff;
    }
?>
Commentiamola.

Creiamo la funzione e prevediamo i parametri che deve accettare; effettuiamo dei calcoli in base al tipo di intervallo scelto, in modo da ricevere il valore numerico richiesto; dividiamo le due date in array di stringa, in funzione del carattere "/", e recuperiamo per entrambe giorno, mese ed anno.

A questo punto creiamo il timestamp della data finale, sottraendo il timestamp di quella di partenza: in partenza abbiamo due stringhe che formano le date che ci interessano, ma al fine di effettuare una sottrazione, dobbiamo disporre di due numeri; ecco che trasformiamo in timestamp le date, opportunamente divise in elementi quali giorno, mese ed anno.

Arrotondiamo quindi il risultato, dividendolo prima in modo da ottenere il numero di giorni, quindi dividendolo per il tipo di intervallo specificato.

Possiamo naturalmente potenziarla con dei controlli che prevedono che il tipo di intervallo non dev'essere diverso diverso da quelli predefiniti e che le date siano passate in formato corretto.

Le convenzioni che useremo per identificare il tipo di intervallo da calcolare sono le seguenti:

  • A - calcolo differenza in anni.
  • M - calcolo differenza in mesi.
  • S - calcolo differenza in settimane.
  • G - calcolo differenza in giorni.
Entrambe le date, quella di partenza e quella finale, accettano il formato data gg/mm/aaaa.

Salviamo il codice nel file datediff.php ed eseguiamo sul nostro server Web personale con supporto di PHP.

Facciamo un esempio. Calcoliamo in anni la differenza tra la nostra data di nascita ed oggi, per capire quanti anni abbiamo:

<?PHP
	echo datediff("A", "12/04/1978", "11/12/2009");
?>
Restituisce 31.

Lascio al lettore il compito di effettuare altri test.

Nella stessa categoria...
E-Learning
Corso LinuxCorso Linux
Guida completa al sistema open-source. A partire da 39 €.
Corso MySQLCorso MySQL
Gestione del database open-source. A partire da 49 €.
Corso PHPCorso PHP
Corso completo per la creazione di siti Web dinamici. Sconto -25% sino al 15/02/2012.
Link sponsorizzati