【问题标题】:Calculate difference between dates returning wrong计算返回错误的日期之间的差异
【发布时间】:2017-02-08 13:00:04
【问题描述】:

我正在尝试使用此代码获取日期之间的差异,但它无法产生正确的结果,此代码有什么问题,我找不到。

$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 天

它计算正确的年份和月份,但日期是错误的。

【问题讨论】:

  • 你考虑过闰年吗?
  • 闰年...?这始终是这里的警告
  • 但是.. 你为什么要忽略闰年?有些年份多出 1 天,这就是我们定义日历的方式。
  • 另外:我认为$diff-&gt;d % 7 应该是$diff-&gt;days % 7(分别像那一行的地板)
  • 但它在技术上是正确的,因为那些闰年实际上有 366 天(严格来说,每年有 365.25 天)。究竟为什么需要忽略闰日?

标签: php date-difference


【解决方案1】:

也许这个功能可以帮助你:

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

【讨论】:

  • 请提供此错误的详细信息。使用 $birth_date = new DateTime("1977-03-23"); $current_date = new DateTime();
  • 我看到错误在哪里 - 在这一行 if (date("L", strtotime($i . '-01-01')) == 1) 缺少 { }
  • 500 发生错误 - 语法错误,文件意外结束
  • 很遗憾我帮不了你,因为这段代码对我有用。尝试在您的系统上调试此代码。
【解决方案2】:

也许你错过了闰年,这可以解释 9 天的差异,例如

9 * 4 y = 36 years

【讨论】:

  • 这是,因为结果没有问题,不需要解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多