La gestione delle date in PHP prevede tre diverse rappresentazioni:
- la stringa di caratteri, come “25/12/2019”;
- il timestamp, che individua una data come numero di secondi trascorsi dalle ore 00:00:00 del primo gennaio 1970, nel fuso orario di riferimento, noto come Coordinated Universal Time o UTC (questa data è conosciuta come l’Epoca).
- la classe DateTime, che rappresenta una data riferita ad uno specifico fuso orario (in pratica la classe DateTime prevede tre proprietà, di cui due riguardano il fuso orario: date, timezone_type, timezone);
Determinare la data corrente in PHP
Per determinare il timestamp della data corrente, utilizzare la funzione time():
$timestamp = time();
Se si vuole creare un oggetto DateTime impostato alla data corrente, utilizzare le istruzioni:
date_default_timezone_set('Europe/Rome');
$dataObject = new DateTime();
/* per visualizzare a schermo i dati dell'oggetto:*/
print_r($dataObject);
Per ottenere una stringa impostata alla data corrente, utilizzare la funzione date(), dichiarando il formato desiderato:
date('d/m/Y H:i:s');
Passare da una rappresentazione ad un’altra
Passare da un timestamp ad un oggetto DateTime in PHP
Per passare da un timestamp ad un oggetto DateTime, utilizzare , utilizzare lil metodo setTimestamp():
$ts = strtotime('+1 week'); /* calcolo il timestamp di oggi, incrementato di una settimana */
date_default_timezone_set('Europe/Rome');
$dataObject = new DateTime();
$dataObject->setTimestamp($ts);
Calcolare il timestamp di un oggetto DateTime in PHP
Per calcolare il timestamp di un oggetto DateTime, utilizzare il metodo getTimestamp():
$timestamp = $dataObject->getTimestamp();
Convertire una stringa in un DateTime o un timestamp in PHP
passando per il formato inglese (“yyyy-mm-dd”) della data
Una prima modalità per ottenere un DateTime o un timestamp partendo da una stringa che rappresenta una data in formato italiano “dd/mm/yyyy” (ad esempio “15/12/2019”), consiste nel transitare prima di tutto alla data in formato inglese (“yyyy-mm-dd”). 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 inglese può essere a questo punto trattata dalle funzioni strtotime(), per ottenere il timestamp, e date_create(), per ottenere l’oggetto DateTime. Se l’application server ha un fuso orario diverso da quello atteso, dichiarare la TimeZone. Di seguito il codice:
$timestamp = strtotime($englishFormatDate);
date_default_timezone_set('Europe/Rome');
$dataObject = date_create($englishFormatDate);
/*la seguente istruzione è equivalente alla precedente:*/
$dataObject = new DateTime($englishFormatDate);
senza transitare per il formato inglese 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:
$inputDate = "15/12/2019";
$dataObject = date_create_from_format('d/m/Y H:i:s',
$inputDate . ' 00:00:00',
new DateTimeZone('Europe/Rome'));
$timestamp = $dataObject->getTimestamp();
Formato delle date in PHP
Sempre partendo da un timestamp, è possibile ottenere una stringa avente qualunque formato di una data, tramite la funzione date(). Ad esempio, le seguenti funzioni restituiscono un numero intero equivalente al giorno, mese e anno del timestamp fornito 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():
$dataObject = date_create("2019-12-15");
echo date_format($dataObject ,"d/m/Y H:i:s");
Calcolare una data correlata ad un’altra
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); /*l'ultimo giorno del mese*/
$newTimestamp = strtotime('next Thursday', $timestamp); /*il giovedì successivo*/
$newTimestamp = strtotime('last Monday', $timestamp); /*il lunedì più recente (nel passato)*/
Calcolo della data in cui ricorre la Pasqua
Se il server PHP utilizzato ha la funzione Calendar abilitata, è possibile ottenere il timestamp delle ore 00:00:00 del giorno di Pasqua di un certo anno tramite la funzione easter_date():
$pasqua2019 = date('d/m/Y', easter_date(2019));
Riferimenti
Per ogni ulteriore informazione sulla gestione delle date in PHP, fare riferimento alla documentazione ufficiale:

0 commenti