Я хотел бы работать с PHP DateInterval перебирать месяцы:PHP: DatePeriod с последним днем месяца
$from = new DateTime();
$from->setDate(2014, 1, 31);
$period = new DatePeriod($from, new DateInterval('P1M'), 12);
Я бы ожидать, что она вернется 31 января, 28 февраля (как DateInterval 1 месяц), но он фактически возвращается 31 января, 3 марта, 3 апреля ... следовательно, пропуская февраль.
Есть ли способ сделать это просто?
Спасибо!
EDIT: как Эталонное, вот это решение, которое, кажется, чтобы охватить большинство случаев использования:
$date = new DateTime('2014-01-31');
$start = $date->format('n');
for ($i = 0; $i < 28; $i++) {
$current = clone $date;
$current->modify('+'.$i.' month');
if ($current->format('n') > ($start % 12) && $start !== 12) {
$current->modify('last day of last month');
}
$start++;
echo $current->format('Y-m-d').PHP_EOL;
}
это работает только, если вам нужно в последний день месяц. На самом деле я хочу повторить и заставить его работать во всех случаях (поэтому он также должен работать, повторяя каждый месяц, начиная с 2 января, например). –
Я вижу. Обновлен мой ответ с новым кодом. Можете ли вы протестировать его и сообщить мне, если это то, что вы хотели? –
Да, я пробовал различные кромки с февраля и, похоже, работает отлично! (хотя я по-прежнему считаю, что поведение DatePeriod нелогично ...). Большое спасибо –