strtotime +1 месяц проходит в следующем месяце

Когда используешь strtotime() добавить один месяц, это дает мне неправильный вывод в состоянии, где я поставил дату «2017-01-30»

function date_diff($min,$max)
{
$d1 = strtotime($min);
$d2 = strtotime($max);
$min_date = min($d1, $d2);
$max_date = max($d1, $d2);
$count=$i = 0;
while (($min_date = strtotime("+1 MONTH", $min_date)) <= $max_date)
{
echo "<br/>";
echo date('Y-m-d',$min_date)."--------".date("Y-m-d",$max_date);
}

}

Я вызываю функцию с такими датами:

date_diff("2016/12/30","2017/07/30");

Вывод функции выше:

2017-01-30--------2017-07-30
2017-03-02--------2017-07-30 // wrong calculation on this line
2017-04-02--------2017-07-30
2017-05-02--------2017-07-30
2017-06-02--------2017-07-30
2017-07-02--------2017-07-30

Ожидаемый результат

2017-01-31--------2017-07-30
2017-02-28--------2017-07-30
2017-03-31--------2017-07-30
2017-04-30--------2017-07-30
2017-05-31--------2017-07-30
2017-06-30--------2017-07-30

-1

Решение

Возможно (вероятно, даже), что я неправильно понимаю ваш вопрос, но вот мой шанс дать ответ.

Код:

function date_func($d1,$d2){
$min=date("Y-m-t",strtotime(min([$d1,$d2])));  // always the last day of the month
$max=date("Y-m-d",strtotime(max([$d1,$d2])));
$month_count=0;
while(($min=date("Y-m-t",strtotime("$min +1 day")))<$max){
++$month_count;
echo "$min--------$max\n";
}
echo "Month Count: $month_count\n";  // I assume you only want the count at the end
}
date_func("2016/12/30","2017/07/30");  // I had to rename your function to avoid an error

Выход:

2017-01-31--------2017-07-30
2017-02-28--------2017-07-30
2017-03-31--------2017-07-30
2017-04-30--------2017-07-30
2017-05-31--------2017-07-30
2017-06-30--------2017-07-30
Month Count: 6
1

Другие решения

Найди разницу в месяце и используй mktime

$min="2016/12/30";
$max="2017/07/30";
$ts1 = strtotime($max);
$ts2 = strtotime($min);

$year1 = date('Y', $ts1);
$year2 = date('Y', $ts2);

$month1 = date('m', $ts1);
$month2 = date('m', $ts2);

$diff = (($year1 - $year2) * 12) + ($month1 - $month2);

for ($i = 1; $i < $diff; $i++)
{
$last_day=date('m-t-Y', strtotime(date('Y-m-d', mktime(0, 0, 0, $i, 1, $year1))));
echo $last_day."--------".date('Y-m-d',$ts1);
echo "<br>";
}

Выход

01-31-2017--------2017-07-30
02-28-2017--------2017-07-30
03-31-2017--------2017-07-30
04-30-2017--------2017-07-30
05-31-2017--------2017-07-30
06-30-2017--------2017-07-30
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector