Подсчет количества дней и деление на семь не даст вам количество недель между двумя датами. Вместо этого он вернет результат деления на 7, которое не всегда соответствует количеству недель между двумя датами, если рассматривать количество недель в расчете ISO.
Например, с учетом start_date = "2010-12-26"
и end_date = "2011-01-25"
вы пройдете через W51,52,01,02,03,04 и это 6 недель согласно ISO, но если вы просто рассчитаете разницу и поделите на 7 , вы получите 5.
Эта проблема возникает, когда даты начала и окончания относятся к разным годам.
Лучший способ сделать расчет - это получить номер последней недели start_date
года, и он должен относиться к 28 декабря.
function weeks($ladate2,$ladate3) {
$start_week= date("W",strtotime($ladate2));
$end_week= date("W",strtotime($ladate3));
$number_of_weeks= $end_week - $start_week;
$weeks=array();
$weeks[]=$start_week;
$increment_date=$ladate2;
$i="1";
if ($number_of_weeks<0){
$start_year=date("Y",strtotime($ladate2));
$last_week_of_year= date("W",strtotime("$start_year-12-28"));
$number_of_weeks=($last_week_of_year-$start_week)+$end_week;
}
while ($i<=$number_of_weeks)
{
$increment_date=date("Y-m-d", strtotime($ladate2. " +$i week"));
$weeks[]=date("W",strtotime($increment_date));
$i=$i+1;
}
return $weeks;
}
function diff_weeks($ladate2,$ladate3) {
$weeks=weeks($ladate2,$ladate3);
$diff_weeks=count($weeks);
return $diff_weeks;
}
С наилучшими пожеланиями,
Manikam