Есть ли простой способ рассчитать периоды времени в 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