Există o modalitate ușoară de a calcula perioadele de timp în PHP?

După câteva cercetări în documentația PHP. Am descoperit că există o clasă PHP specială DatePeriod care poate fi folosită pentru a implementa asta.

„O perioadă de date permite repetarea unui set de date și ore, care se repetă la intervale regulate, pe o anumită perioadă.”

Clasa DatePeriod are o semnătură ca mai jos,

public DatePeriod::__construct ( DateTimeInterface $start , DateInterval $interval , DateTimeInterface $end [, int $options ] )

După cum puteți observa, pentru a crea obiectul DatePeriod aveți nevoie de două obiecte DateTime (Implements DateTimeInterface) și obiect DateInterval.

Puteți crea pur și simplu obiect DateTime trecând șirul de date ca mai jos,

public DateTime::__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
$date = new DateTime('2018-01-01');
$date = new DateTime();//now

Pentru a crea un obiect DateInterval trebuie să treceți șirul de interval așa cum este descris mai jos.

public DateInterval::__construct ( string $interval_spec )
$Duration = new DateInterval( "P1M" );

$interval_spec este definit ca mai jos,

Indicator de perioadă (Descriere)
P (Perioadă)
Y (ani)
L (luni)
D (zile)
W (săptămâni. Acestea sunt convertite în zile) , deci nu poate fi combinat cu D.)
T (Timp)
H (ore)
M (minute)
S (secunde)

Mai jos sunt câteva exemple pentru specificațiile intervalului

String
P1Y — 1 an
P2M — 2 luni
P7D — 7 zile
P3W — 3 săptămâni
PT5H — 5 ore
PT2H30M — 2 ore și 30 minute
PT5M45S — 5 minute 45 secunde
P3WT8H — 3 săptămâni 8 ore
P1Y2M3DT4H5M6S — 1 an 2 luni 3 zile 4 ore 5 minute și 6 secunde

Acum trebuie să aveți cunoștințe de bază despre obiectele DateTime și DateInterval. Să creăm un DatePeriod.

$start = new DateTime( '2018-01-01' );
$end = new DateTime( '2018-04-01' );
$interval = new DateInterval('P1D');//one day interval
$date_period = new DatePeriod($start, $interval ,$end);

Mai jos, creăm o serie de șiruri de date folosind cunoștințele anterioare.

$dates_arr = array();
foreach($date_period as $date){
    array_push($dates_arr,$date->format("Y-m-d"));
}
print_r($dates_arr);

aici am folosit Format pentru a obține data în formatul de care aveam nevoie.

Spune-mi gândurile tale în comentarii. Noroc !

Urmărește-mă pe twitter @MavenSanK