Рассчитать разницу между датами, возвращающимися неправильно

Я пытаюсь получить разницу между датами, используя этот код, но он не может дать правильный результат, что не так с этим кодом, я не мог выяснить.

$birth_date     = new DateTime("1977-03-23");
$current_date   = new DateTime();

$diff           = $birth_date->diff($current_date);

echo $years     = $diff->y . " years " . $diff->m . " months " . $diff->d . " day(s)"; echo "<br/>";
echo $months    = ($diff->y * 12) + $diff->m . " months " . $diff->d . " day(s)"; echo "<br/>";
echo $weeks     = floor($diff->days/7) . " weeks " . $diff->d%7 . "  day(s)"; echo "<br/>";
echo $days      = $diff->days . " days"; echo "<br/>";

Это показывает Outout — 39 лет 10 месяцев 16 дней
Но я думаю, что выход должен быть — 39 лет 10 месяцев 7 дней

Он правильно рассчитывает год и месяц, но дни ошибочны.

0

Решение

Может быть, эта функция может помочь вам:

function leap_year($date1, $date2)
{
$y1 = $date1->format('Y');
if ($date1->format('m')>2) $y1++;

$y2 = $date2->format('Y');
if ($date2->format('m')<=2) $y2--;

$leap_years = 0;
for($i = $y1; $i <= $y2; $i++)
{
//echo date("Y", strtotime($i . '-01-01')).' '.date("L", strtotime($i . '-01-01')).'<br/>';

if (date("L", strtotime($i . '-01-01')) == 1)
$leap_years++;
}
return $leap_years;
}
echo leap_year($birth_date, $current_date);
0

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

Может быть, вы пропустили високосные годы, это может объяснить разницу в 9 дней, например

9 * 4 y = 36 years
-1

По вопросам рекламы [email protected]