簡體   English   中英

計算返回錯誤的日期之間的差異

[英]Calculate difference between dates returning wrong

我正在嘗試使用此代碼獲取日期之間的差異,但它無法產生正確的結果,此代碼有什么問題,我無法找到。

$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個月7天,但我認為輸出應該是-39年10個月7天

它可以正確計算年和月,但是天是錯誤的。

也許此功能可以幫助您:

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);

也許您錯過了leap年,這可以解釋9天的差異,例如

9 * 4 y = 36 years

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM