#php #datetime
#php #datetime
Вопрос:
Мне нужно получить все числовые месяцы, охватываемые диапазоном дат. Итак, для диапазона 18 июля 2014 года — 4 сентября 2014 года дайте мне 7,8,9.
Это приближает меня:
$start = new DateTime('2014-07-18');
$interval = new DateInterval('P1M');
$end = new DateTime('2014-09-04');
$period = new DatePeriod($start, $interval, $end);
foreach ($period as $dt) {
echo $dt->format('n') . PHP_EOL;
}
Он возвращает 7 и 8, но не 9 для сентября, потому что это не полный интервал P1M. Я хотел бы получить 7,8,9 независимо от того, где в месяце выпадают начальные / конечные дни.
Я иду в правильном направлении?
Комментарии:
1. Вы могли бы заставить ваш день даты начала быть равным 1, а день даты окончания — 28 (так что он действителен для каждого месяца). Может быть, не очень чисто, но должно сработать.
Ответ №1:
Нашел ответ на этой странице: http://forums.phpfreaks.com/topic/275341-find-what-months-a-date-range-covers /
$start = new DateTime('2014-07-18');
$end = new DateTime('2014-09-04');
$inc = DateInterval::createFromDateString('first day of next month');
$end->modify(' 1 day');
$p = new DatePeriod($start,$inc,$end);
foreach ($p as $d)
echo $d->format('n') . PHP_EOL;
Выводит:
7 8 9
Комментарии:
1. Спасибо за это. Есть небольшое расхождение, если конечная дата — последний день месяца (с 01 июля по 30 сентября получается 7,8,9,10), но я могу с этим смириться.
2. Странно, когда я использую ‘2014-07-18’ и ‘2014-09-30’, я все равно получаю ‘7 8 9’. Даже когда я использую ‘2014-07-18’ и ‘2014-08-31’, я получаю ‘7 8’.