Php месяцы в интервале

Как перечислить все месяцы между двумя датами

Важна роль, в которой мы меняем даты начала и окончания первого месяца. Если бы мы этого не сделали, а в текущий день выше, чем в последний день февраля (т. Е. 28 в непиковые годы, 29 в високосные годы), это пропустит февраль.

Вы должны сделать разницу между двумя месяцами того же года и двух месяцев разных лет.

$year_min = substr($row['contractStart'], 0, 4); $year_max = substr($row['contractEnd'], 0, 4); $month_min = substr($row['contractStart'], 5, 2); $month_min = substr($row['contractEnd'], 5, 2); $period = array(); try < if ($year_min >$year_max) throw new Exception(); else if ($year_min == $year_max) if ($month_min > $month_max) throw new Exception(); for ($month = $month_min; $month else < for ($month = $month_min; $month for ($year = $year_min + 1; $year < $year_max; $year++) < for ($month = $month_min; $month > for ($month = 1; $month > implode("
\r\n", $period); > catch (Exception $e) в $year_min = substr($row['contractStart'], 0, 4); $year_max = substr($row['contractEnd'], 0, 4); $month_min = substr($row['contractStart'], 5, 2); $month_min = substr($row['contractEnd'], 5, 2); $period = array(); try < if ($year_min >$year_max) throw new Exception(); else if ($year_min == $year_max) if ($month_min > $month_max) throw new Exception(); for ($month = $month_min; $month else < for ($month = $month_min; $month for ($year = $year_min + 1; $year < $year_max; $year++) < for ($month = $month_min; $month > for ($month = 1; $month > implode("
\r\n", $period); > catch (Exception $e) в $year_min = substr($row['contractStart'], 0, 4); $year_max = substr($row['contractEnd'], 0, 4); $month_min = substr($row['contractStart'], 5, 2); $month_min = substr($row['contractEnd'], 5, 2); $period = array(); try < if ($year_min >$year_max) throw new Exception(); else if ($year_min == $year_max) if ($month_min > $month_max) throw new Exception(); for ($month = $month_min; $month else < for ($month = $month_min; $month for ($year = $year_min + 1; $year < $year_max; $year++) < for ($month = $month_min; $month > for ($month = 1; $month > implode("
\r\n", $period); > catch (Exception $e)

Это сложно. Теперь есть быстрый и простой способ, который уже дается в качестве ответа, который я рекомендую вам выбрать.

 function getMonthsInRange($startDate, $endDate) < $months = array(); while (strtotime($startDate) date('Y', strtotime($startDate)), 'month' => date('m', strtotime($startDate)), ); $startDate = date('d M Y', strtotime($startDate. '+ 1 month')); > return $months; > 

Это было мое решение, поскольку DateTime недоступна в моей серверной среде.

$a = "2007-01-01"; $b = "2008-02-15"; $i = date("Ym", strtotime($a)); while($i

Источник

Читайте также:  vertical-align

Класс DateInterval

Интервал дат хранит либо определённое фиксированное время (в годах, месяцах, днях, часах и т.д.) или относительную строку времени в формате, поддерживаемом конструктором DateTimeImmutable и DateTime .

Более конкретно, информация в объекте класса DateInterval является инструкцией для перехода от одной даты/времени к другой дате/времени. Этот процесс не всегда обратим.

Распространённым способом создания объекта DateInterval является вычисление разницы между двумя объектами даты/времени с помощью DateTimeInterface::diff() .

Поскольку не существует чётко определённого способа сравнения интервалов дат, экземпляры DateInterval являются несравнимыми.

Обзор классов

Свойства

Доступные свойства, перечисленные ниже, зависят от версии PHP и должны рассматриваться как доступные только для чтения.

Количество микросекунд в виде долей секунды.

Принимает 1 , если интервал представляет отрицательный период времени и 0 в противном случае. Смотрите DateInterval::format() .

Если объект DateInterval создан методом DateTimeImmutable::diff() или DateTime::diff() , то это общее количество полных дней между начальной и конечной датами В противном случае days примет значение false .

Если объект DateInterval был создан методом DateInterval::createFromDateString() , то значение свойства будет true и свойство date_string будет заполнено. В противном случае значение свойства будет false и свойства от y до f , invert и days будут заполнены.

Строка, используемая в качестве аргумента метода DateInterval::createFromDateString() .

Список изменений

Версия Описание
8.2.0 Добавлены свойства from_string и date_string для экземпляров DateInterval , которые были созданы с помощью метода DateInterval::createFromDateString() .
8.2.0 Будут видны только значения от y до f , invert и days .
7.4.0 Экземпляры DateInterval теперь несравнимы; ранее все экземпляры DateInterval считались равными.
7.1.0 Добавлено свойство f .

Источник

Как получить все дни между датами в PHP

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

Количество дней между датами

$date_1 = '28.03.2022 00:00'; $date_2 = '02.04.2022 23:59'; $seconds = abs(strtotime($date_1) - strtotime($date_2)); echo round($seconds / 86400, 1); // 6
$date_1 = '28.03.2022 00:00'; $date_2 = '02.04.2022 18:00'; $seconds = abs(strtotime($date_1) - strtotime($date_2)); echo round($seconds / 86400, 1); // 5.6

Формирование массива, содержащий все дни из интервала

Первый способ – использование классов DatePeriod, DateTime и DateInterval (доступны с версии PHP 5.3).

* Если в конечной дате не указать время (23:59), то в результирующем массиве не будет последнего дня.

$period = new DatePeriod( new DateTime('28.03.2022'), new DateInterval('P1D'), new DateTime('02.04.2022 23:59') ); $dates = array(); foreach ($period as $key => $value) < $dates[] = $value->format('d.m.Y'); > print_r($dates);

Результат:

Array ( [0] => 28.03.2022 [1] => 29.03.2022 [2] => 30.03.2022 [3] => 31.03.2022 [4] => 01.04.2022 [5] => 02.04.2022 )

Функция на основе strtotime

function get_dates($start, $end, $format = 'd.m.Y') < $day = 86400; $start = strtotime($start . ' -1 days'); $end = strtotime($end . ' +1 days'); $nums = round(($end - $start) / $day); $days = array(); for ($i = 1; $i < $nums; $i++) < $days[] = date($format, ($start + ($i * $day))); >return $days; > $dates = get_dates('28.03.2022', '02.04.2022'); print_r($dates);

Результат:

Array ( [0] => 28.03.2022 [1] => 29.03.2022 [2] => 30.03.2022 [3] => 31.03.2022 [4] => 01.04.2022 [5] => 02.04.2022 )

Источник

Класс ДатаИнтервал

Интервал дат хранит либо фиксированное количество времени (в годах, месяцах, днях, часах и т. Д.), Либо строку относительного времени в формате, который поддерживает конструктор DateTime .

Более конкретно, информация в объекте класса DateInterval — это инструкция для перехода от одной даты / времени к другой дате / времени. Этот процесс не всегда обратим.

Обычный способ создания объекта DateInterval — вычисление разницы между двумя объектами даты / времени с помощью DateTimeInterface :: diff () .

Class synopsis

public static createFromDateString(string $datetime): DateInterval|false
public format(string $format): string

Properties

Количество микросекунд,в доли секунды.

Имеет значение 1 , если интервал представляет собой отрицательный период времени, и 0 в противном случае. Смотрите DateInterval :: format () .

Если объект DateInterval был создан DateTime :: diff () , то это общее количество дней между начальной и конечной датами. В противном случае days будут false .

Changelog

PHP 8.2

(PHP 5 5.2.0,7,8)Этот класс ведет себя так же,как DateTimeImmutable,за исключением того,что объекты модифицируются сами,когда модифицируются методы,такие как DateTime::modify()

Источник

Оцените статью