Gestione delle date in PHP e MySQL

Gestione delle date in PHP

Come per altri linguaggi di programmazione, in PHP è necessario distinguere tra:

  • una stringa che rappresenta una data, come: “25/12/2019”;
  • un timestamp, che individua una data come numero di secondi trascorsi dalla mezzanotte del primo gennaio 1970 (UTC); questa data è conosciuta come l’Epoca.;
  • un oggetto DateTime, che rappresenta una data rispetto al Coordinated Universal Time (UTC).

Passando per il formato americano della data “yyyy-mm-dd”

Partendo da una stringa che rappresenta una data in formato italiano, quale ad esempio “15/12/2019”, per ottenere una delle tre rappresentazioni è necessario passare prima di tutto alla data in formato americano. Un modo, basato sulla trasformazione delle stringhe, è il seguente:

$inputDate = "15/12/2019";
$englishFormatDate = implode('-',array_reverse(explode('/',$inputDate)));

Sostanzialmente:

  • la funzione explode() separa ed inserisce in un array i tre valori di giorno, mese e anno,
  • la funzione array_reverse() rovescia l’ordine dell’array, portano l’anno al primo posto e il giorno all’ultimo,
  • la funzione implode() compatta l’array nella stringa “2019-12-25”, che ha un formato riconosciuto da PHP (per maggiori dettagli sui formati di data e ora in PHP, vedere: https://www.php.net/manual/en/datetime.formats.php.

La data in formato americano può essere trattata dalle funzioni strtotime(), per ottenere il timestamp, e date_create(), per ottenere l’oggetto DateTime. Affinché l’oggetto tenga in considerazione il fuso orario locale, è necessario dichiarare la propria TimeZone. Di seguito il codice:

$timestamp = strtotime($englishFormatDate);

date_default_timezone_set('Europe/Rome');
$dataObject = date_create($englishFormatDate);
/*la seguente scrittura è equivalente:*/
$dataObject  = new DateTime($englishFormatDate);

Senza transitare per il formato americano della data

Un metodo alternativo consiste nel creare l’oggetto DateTime direttamente dalla rappresentazione della data in formato italiano, tramite la funzione date_create_from_format(), per poi utilizzare uno dei metodi dell’oggetto DateTime per ottenere il timestamp:

$dataObject = date_create_from_format('d/m/Y H:i:s', 
                $inputDate . ' 00:00:00', 
                new DateTimeZone('Europe/Rome'));
$timestamp  = $dataObject->getTimestamp();

Avendo a disposizione il timestamp di una data, è possibile ottenere i timestamp di date correlate, sempre tramite la funzione strtotime(),  ad esempio:

$newTimestamp = strtotime('last day of', $timestamp);

Formati di data

Sempre partendo da un timestamp, è possibile ottenere un qualunque formato di data, tramite la funzione date(). Ad esempio, le seguenti funzioni restituiscono un numero intero equivalente al giorno, mese e anno della data fornita come parametro:

$giorno = (int)date('d', $timestamp);
$mese   = (int)date('m', $timestamp);
$anno   = (int)date('Y', $timestamp);

Per ottenere un particolare formato data, partendo dall’oggetto DateTime, va utilizzata la funzione date_format

Calcolo della Pasqua.

Se il server PHP utilizzato ha la funzione Calendar abilitata, è possibile ottenere il timestamp della mezzanotte del giorno di Pasqua di un certo anno con la seguente funzione easter_date()e :

$pasqua2019 = date('d/m/Y', easter_date(2019));

Riferimenti

Per ogni ulteriore informazione sulle date e ore in PHP, fare riferimento alla documentazione ufficiale:

Gestione delle date in MySQL

__work in progress__