La sostanziale differenza tra PHP 5 e la versione 4 è il massiccio utilizzo della programmazione ad oggetti. Grazie ad essa numerose operazioni sono state raggruppate in unici oggetti.
Tali oggetti possono anche essere estesi a nostro piacimento, così da creare strumenti sempre più potenti per lo sviluppo.
Con questo articolo voglio fare focus sull’oggetto DateTime. Tale oggetto si occupa di gestire le date. Grazie ai suoi metodi, è in grado si eseguire operazioni che prima richiedevano numerose conversioni e righe di codice.
Farò due esempio per dimostrarlo.
Il primo riguarda l’aggiungere (o sottrarre) giorni, mesi o anni ad una data. Precedentemente tale operazione era affidata alla funzione mktime che restituiva lo unix_timestamp che poi, con la funzione date, andava formattata nel formato desiderato.
Con l’oggetto DateTime la cosa si traduce nel seguente codice:
# Aggiungo 30 giorni ad oggi
$objDateTime = new DateTime('now');
$objDateTime->modify('+30 day');
echo $objDateTime->format('Y-m-d');
# Sottraggo 5 mesi ad oggi
$objDateTime = new DateTime('now');
$objDateTime->modify('-5 month');
echo $objDateTime->format('Y-m-d');
# Aggiungo 1 anno ad oggi
$objDateTime = new DateTime('now');
$objDateTime->modify('+1 year');
echo $objDateTime->format('Y-m-d');
Dichiarato l’oggetto, con il metodo DateTime::modify sarò in grado di eseguire tutte le operazioni che desidero sulla data. Il parametro now passato all’oggetto indica che vogliamo lavorare con la data corrente, altrimenti avrei potuto indicare una data nel formato Timestamp.
Il secondo esempio mostra com’è facile lavorare con i fusi orari (o timezone). Il tutto è stato reso molto facile grazie anche all’ausilio di un altro oggetto, lo DateTimeZone.
Grazie a questo oggetto possiamo impostare il timezone col quale vogliamo lavorare e fare conversioni di date.
Col seguente esempio siamo in grado di sapere quanti secondi ci sono tra due differenti fusi orari:
$dateTimeZoneTaipei = new DateTimeZone('Asia/Taipei');
$dateTimeZoneJapan = new DateTimeZone('Asia/Tokyo');
$dateTimeTaipei = new DateTime('now', $dateTimeZoneTaipei);
$dateTimeJapan = new DateTime('now', $dateTimeZoneJapan);
$timeOffset = $dateTimeZoneJapan->getOffset($dateTimeTaipei);
# Stamperà int(32400)
var_dump($timeOffset);
Tale operazione prima era molto più complessa da eseguire.
Sebbene la documentazione ufficiale sia ancora un pò scarsa su questi due oggetti, basta smanettare un pò per apprezzarne subito le potenzialità.














