找到闰年

时间:2013-07-29 12:46:47

标签: php for-loop

我正在使用php代码,我开始使用for statment。

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

现在我明白$ i = 0从0开始计数,$ i&lt; $ 4表示从0到4以下计数。

我想要实现的是为语句添加多个而不是使用多个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 个答案:

答案 0 :(得分:9)

您可以使用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

答案 1 :(得分:7)

使用conditions for a leap year并查看年份。为此使用一个语句!

function is_leap_year($year)
{
   return ((($year % 4) == 0) && ((($year % 100) != 0) || (($year % 400) == 0)));
}

答案 2 :(得分: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>";
        }
    }
?>

答案 3 :(得分: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');
}