Есть ли простой способ рассчитать периоды времени в PHP?

После некоторого покопания в документации PHP. Я обнаружил, что для этого можно использовать специальный класс PHP DatePeriod.

«Период дат позволяет выполнять итерацию по набору дат и времени, повторяющуюся через равные промежутки времени в течение определенного периода».

Класс DatePeriod имеет подпись, как показано ниже,

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

Как вы можете заметить, для создания объекта DatePeriod вам понадобятся два объекта DateTime (реализует DateTimeInterface) и объект DateInterval.

Вы можете просто создать объект DateTime, передав строку даты, как показано ниже,

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

Чтобы создать объект DateInterval, вам необходимо передать строку интервала, как описано ниже.

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

$ interval_spec определяется, как показано ниже,

Обозначение периода (описание)
P (период)
Y (годы)
M (месяцы)
D (дни)
W (недели. Они преобразуются в дни , поэтому не может сочетаться с D.)
T (время)
H (часы)
M (минуты)
S (секунды)

Ниже приведены некоторые примеры спецификаций интервалов.

Строка
P1Y - 1 год
P2M - 2 месяца
P7D - 7 дней
P3W - 3 недели
PT5H - 5 часов
PT2H30M - 2 часа и 30 минут
PT5M45S - 5 минут 45 секунд
P3WT8H - 3 недели 8 часов
P1Y2M3DT4H5M6S - 1 год 2 месяца 3 дня 4 часа 5 минут и 6 секунд

Теперь вы должны иметь базовое представление об объектах DateTime и DateInterval. Давайте создадим 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);

Ниже мы создаем массив строк даты, используя предыдущие знания.

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

здесь я использовал Формат, чтобы получить дату в нужном мне формате.

Сообщите мне свои мысли в комментариях. Ваше здоровье !

Следуй за мной в твиттере @MavenSanK