Czy istnieje prosty sposób obliczania okresów czasu w PHP?

Po pewnym kopaniu w dokumentacji PHP. Odkryłem, że istnieje specjalna klasa PHP „DatePeriod”, której można użyć do zaimplementowania tego.

„Okres daty umożliwia iterację po zestawie dat i godzin, powtarzających się w regularnych odstępach czasu, w danym okresie.”

Klasa DatePeriod posiada podpis jak poniżej,

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

Jak widać, do utworzenia obiektu DatePeriod potrzebne są dwa obiekty DateTime( Implements DateTimeInterface) i obiekt DateInterval .

Możesz po prostu utworzyć obiekt DateTime, przekazując ciąg daty jak poniżej,

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

Aby utworzyć obiekt DateInterval, należy przekazać ciąg interwałów w sposób opisany poniżej.

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

$interval_spec jest zdefiniowany jak poniżej,

Oznaczenie okresu (opis)
P (okres)
Y (lata)
M (miesiące)
D (dni)
W (tygodnie. Są one konwertowane na dni , więc nie można łączyć z D.)
T (Czas)
H (godziny)
M (minuty)
S (sekundy)

Poniżej znajduje się kilka przykładów specyfikacji interwałów

String
P1Y — 1 rok
P2M — 2 miesiące
P7D — 7 dni
P3W — 3 tygodnie
PT5H — 5 godzin
PT2H30M — 2 godziny i 30 minut
PT5M45S — 5 minut 45 sekund
P3WT8H — 3 tygodnie 8 godzin
P1Y2M3DT4H5M6S — 1 rok 2 miesiące 3 dni 4 godziny 5 minut i 6 sekund

Teraz musisz mieć podstawową wiedzę na temat obiektów DateTime i DateInterval. Utwórzmy 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);

Poniżej tworzymy tablicę ciągów dat, korzystając z wcześniejszej wiedzy.

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

tutaj użyłem Formatu, aby uzyskać datę w wymaganym formacie.

Daj mi znać swoje przemyślenia w komentarzach. Dzięki !

Śledź mnie na Twitterze @MavenSanK