1

我正在使用 php 代码,首先我使用的是 for 语句。

for($i=0; $i<4; $i++)

现在我明白 $i=0 从 0 开始计数,并且 $i < $4 意味着从 0 计数到 4 以下。

我想要实现的是添加多个 for 语句而不是使用多个 php 代码。

for($i=0; $i<4; $i++)
for($i=4; $i<8; $i++)
for($i=8; $i<12; $i++)
for($i=12; $i<16; $i++)

.......等等,以便列出所有结果。

<?php
$day = "";
for($i=0; $i<4; $i++)
{
    $day =  date("d", mktime(0, 0, 0, 2, 29, date("Y")+$i));
    if($day == 29)
    {
        $year = date("Y")+$i;
        break;
    }
}
echo "<p>The next leap year is 29th February $year</p>";    
?>

回显的结果将是:

下一个闰年是 2016 年 2 月 29 日

下一个闰年是2020年2月29日

4

4 回答 4

10

您可以检查闰年date("L")

$yearsToCheck = range(2013, 2020);

foreach ($yearsToCheck as $year) {
    $isLeapYear = (bool) date('L', strtotime("$year-01-01"));
    printf(
        '%d %s a leap year%s',
        $year,
        $isLeapYear ? 'is' : 'is not',
        PHP_EOL
    );
}

输出

2013 is not a leap year
2014 is not a leap year
2015 is not a leap year
2016 is a leap year
2017 is not a leap year
2018 is not a leap year
2019 is not a leap year
2020 is a leap year
于 2013-07-29T12:52:03.087 回答
7

使用闰年的条件,只需检查年份。为此使用一个语句!

function is_leap_year($year)
{
   return ((($year % 4) == 0) && ((($year % 100) != 0) || (($year % 400) == 0)));
}
于 2013-07-29T12:50:34.747 回答
3

为什么不这样?

<?php
    for($i=0; $i<16; $i++)
    {
        $day = date("d", mktime(0, 0, 0, 2, 29, date("Y")+$i));
        if($day == 29)
        {
            $year = date("Y")+$i;
            echo "<p>The next leap year is 29th February $year</p><br>";
        }
    }
?>
于 2013-07-29T12:50:10.210 回答
2

使用DateTime类使这种事情变得快速而简单:-

$datetime = new \DateTime("2013/01/01");
$interval = new \DateInterval('P1Y');
$period = new \DatePeriod($datetime, $interval, 20);
foreach($period as $date){
    if((bool)$date->format('L')){
        echo $date->format('Y') . " is a Leap Year</br>\n";
    }
}

输出:-

2016 is a Leap Year
2020 is a Leap Year
2024 is a Leap Year
2028 is a Leap Year
2032 is a Leap Year

您可以使用此功能以方便重用:-

/**
 * @param int $numberOfYears
 * @return array
 */
function getLeapYears($numberOfYears = 10){
    $result = array();
    $datetime = new \DateTime();
    $interval = new \DateInterval("P1Y");
    $period = new \DatePeriod($datetime, $interval, $numberOfYears);
    foreach($period as $date){
        if((bool)$date->format('L')){
            $result[] = $date->format('Y');
        }
    }
    return $result;
}

或测试给定年份是否为闰年:-

function isLeapYear($year)
{
    return (bool)\DateTime::createFromFormat('Y', $year)->format('L');
}
于 2013-07-29T13:15:01.940 回答