Guida alla gestione delle date in PHP

Guida per le operazioni frequenti nella gestione delle date in PHP: calcolo data corrente, conversione tra diverse rappresentazioni, formato delle date, calcolo di una data correlata e calcolo della data in cui ricorre la Pasqua.

Photo by Ben on Unsplash

immagine dell'autore dell'articolo

Scritto da: Alberto

Una vita nell'informatica, per lavoro e per passione.
agsdix-far fa-calendar-alt
Data pubblicazione: 2 Ottobre 2019
Categorie: PHP
agsdix-far fa-comments

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

Invia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *