La timezone di default viene specificata nel file php.ini.
<?php
$datetime = new DateTime(); //nella timezone secificata nel file php.ini
$timezone = new DateTimeZone('America/Los_Angeles');
$datetime->setTimezone($timezone);
echo $datetime->format('m/d/Y g:i A');
$datetime2 = new DateTime('05/19/1982 01:00 PM'); //per usare PM deve essere formato americano con /
$datetime3 = new DateTime('06-08-2021'); // con lo / sarebbe 8 giugno, con il - è 6 agosto
$datetime4 = new DateTime();
$datetime4->setDate(2020, 5, 1); //l'orario viene messo in automatico ed è quello al momento dell'esecuzione
$datetime4->setTime(5, 30, 0);
//i metodi restituiscono l'oggetto quindi si possono concatenare
$datetime5 = new DateTime();
echo $datetime5->setDate(2020, 5, 1)
->setTime(5, 30)
->setTimezone(new DateTimeZone('America/New_York'))
->format('m/d/Y g:i A');
?>
E' meglio usare il metodo DateTime::createFromFormat()
<?php
$ds = '06/08/2021';
$datetime = DateTime::createFromFormat('d/m/Y', $ds); //non è specificata l'ora quindi è quella corrente del server
echo $datetime->format('F jS, Y'); // August 6th, 2021
?>
Confronto fra date
Si possono confrontare direttamente due oggetti data con gli operatori >, >=, <, <=, ==, <=>
<?php
$datetime1 = new DateTime('01/01/2021 10:00 AM');
$datetime2 = new DateTime('01/01/2021 09:00 AM');
var_dump($datetime1 < $datetime2); // false
var_dump($datetime1 > $datetime2); // true
var_dump($datetime1 == $datetime2); // false
var_dump($datetime1 <=> $datetime2); // 1
?>
Per calcolare la differenza tra due date si usa il metodo diff()
<?php
$nascita = new DateTime('08/02/1990');
$oggi = new DateTime('07/02/2026');
$differenza = $nascita->diff($oggi); //restituisce un oggetto della classe DateInterval
echo $differenza; //errore perchè la classe DateInterval non ha il magic method __toString()
echo $differenza->y; //stampa 35
?>
Per aggiungere un intervallo ad una data si crea un oggetto della classe DateInterval e si passa al metodo add()
<?php
$datetime = new DateTime('01/01/2021');
$datetime->add(new DateInterval('P1Y2M')); // Aggiunge 1 Anno e 2 Mesi
//ora la data è 1 marzo 2022
$datetime->add(new DateInterval('P32D')); // Aggiunge 32 Giorni quindi 2 aprile 2022
?>