Infocurci - programmatore Php Roma
Infocurci - programmatore Php Roma
Questo sito non lascia nessun cookie sul vostro pc, consuma pochissimi kb, non profila nulla e non raccoglie dati personali. Siete i benvenuti.

Php : La classe DateTime

A partire dalla versione 5.2, e con ulteriori sviluppi contenuti nella 5.3, Php ha finalmente offerto un notevole supporto ad un'operazione frequente quanto complessa: la gestione delle date.

Php

La data che arriva in formato Mysql (yyyy-mm-dd), da esporre all'utente in formato italiano (dd-mm-yyyy). L'aggiunta di un timeout, ad esempio mezz'ora, ad un timing. O il confronto tra due date.. Tutte operazioni frequenti, quasi quotidiane, ma poco supportate nei primi anni di vita di Php. Non è stato facile districarsi tra mktime() o unixtimestamp, al punto che qualche sviluppatore preferiva delegare confronti, formattazioni e operazioni sulle date ad una query al database.
Php oggi offre un supporto notevolmente migliorato, grazie sopratutto all'abbinamento tra la classe DateTime e DateInterval (quest'ultima aggiunta in php 5.3). Ecco alcuni esempi pratici.

1) Formattazione di una data
$date = new DateTime('2014-11-30 23:12:34');
echo $date->format('Y-m-d H:i:s');
echo '<hr />';
$date = new DateTime('30-11-2014 23:12:34');
echo $date->format('Y-m-d H:i:s');
echo '<hr />';

In questo esempio prendiamo in input una data e la formattiamo. E' interessante notare che la classe lavora allo stesso modo sia con il format YYYY-MM-DD che con quello DD-MM-YYYY, senza bisogno di dichiarazioni o settaggi.

2) Aggiunta di intervalli
$date = new DateTime('30-11-2014 23:12:34');
$date->add(new DateInterval('P10D'));
echo $date->format('Y-m-d H:i:s');
echo '<hr />';

$date = new DateTime('30-11-2014 23:12:34');
$date->add(new DateInterval('PT10H'));
echo $date->format('Y-m-d H:i:s');
echo '<hr />';

$date = new DateTime('30-11-2014 23:12:34');
$date->add(new DateInterval('P1DT10H'));
echo $date->format('Y-m-d H:i:s');
echo '<hr />';

Nel primo caso, abbiamo aggiunto 10 giorni; nel secondo 10 ore e nel terzo 1 giorno e 10 ore. E' tutto molto semplice, tranne la sigla passata come parametro all'oggetto DateInterval. La sigla P sta per "Period element", la sigla "T" per "Time element". Le sigle per indicare gli intervalli di tempo sono queste:
Y     years
M     months
D     days
W     weeks
H     hours
M     minutes
S     seconds

Quindi, per aggiungere 1 giorno (1D) e 10 ore (10H), fermo restando il prefisso "P" che è sempre necessario, la sigla diventa
P1DT10H
Attenzione alla sigla W, le settimane vengono convertite in giorni quindi non è possibile usare W e D in una stessa espressione.

Infine, vediamo i confronti.
$date1 = new DateTime('30-11-2014 23:12:34');
$date2 = new DateTime('2014-11-30 23:12:34');
var_dump($date1 == $date2);

questo esempio stampa true nonostante il formato della data sia diverso, mentre basta cambiare un solo secondo (provate ad esempio a settare i secondi della prima data a 35 invece di 34) per ritornare un valore false.

A questo punto è semplice intuire la sintassi di altri confronti:
$date1 = new DateTime('30-11-2014 21:12:35');
$date2 = new DateTime('30-11-2014 23:12:34');
var_dump($date1 > $date2);


Che dire... era ora!!!