PHP - 计算日期范围内的闰日

时间:2017-10-22 14:24:53

标签: php date

我正在尝试计算日期范围内的闰天数。

这是我到目前为止(采用here的代码)

<?php
$date_from = strtotime('2019-06-01');
$date_to = strtotime('2021-05-30');
$leapday_count = 0;

for($year=$date_from; $year<=$date_to; $year=strtotime('next year', $year)) {

    if (date('L', $year)) {
         $leapday_count++;
    }   

}

echo $leapday_count;
?>

以下是我需要帮助的地方:

  1. 以上代码仅查看开始日期和结束日期的年份。例如,如果开始日期是2月29日之后,它会。我怎样才能确保它真正考虑整个日期,而不仅仅是日期的年份?

    • 预期结果示例:2020-03-01 2024-02-28之间的0个闰天
    • 预期结果示例:2020-02-28 2024-03-01之间的2个闰天
  2. 提前致谢!

1 个答案:

答案 0 :(得分:2)

停止进行日期数学运算。这很难。

使用datetime和diff

http://php.net/manual/en/datetime.diff.php

那里的例子

$datetime1 = new DateTime('2009-10-11');

$datetime2 = new DateTime('2009-10-13');

$interval = $datetime1->diff($datetime2);

 echo $interval->format('%R%a days');

准确回答这个问题。

$start = new DateTime('2020-03-01');
$end = new DateTime('2024-02-28');
$interval = ("last day of feb next year");

$current = clone $start;
$leapYears = 0;
while ($current->modify("last day of feb") && $current <= $end) {
    if ($current->format('d') == 29 && $current > $start) {
        $leapYears++;
    }
    $current->modify("+1 year");
}