Indice dei contenuti
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__