如何在闰年中获得每个月的总天数

时间:2014-12-16 16:22:56

标签: php

我正在尝试创建一个脚本函数,它可以获得一年中每个月的总天数。 我的想法是创建一个过去12个月的报告,我们有可能获得闰年,我的计算不包括这个。 我尝试创建一个代码,该代码映射了除了闰年2月29天之外的所有月份。

这是我的代码:

public function checkMes(){

    // ----------------------------------- Verificar se o mes tem 30 ou 31  ou 28 dias  -------------
    $month = array();
    for ($i = -10; $i < 0; $i++)
    {
        $check_month = date('m');

        if($check_month == '01' || $check_month == '03' || $check_month == '05' || $check_month == '07' || $check_month == '08' || $check_month == '10' || $check_month == '12')
        {
            $month[] = date('m/Y',strtotime('+'.$i.' months + 1 days'));

        }elseif($check_month == '02'){
             $month[] = date('m/Y',strtotime('+'.$i.' months - 2 days'));

        }else{
            $month[] = date('m/Y',strtotime('+'.$i.' months')); 

        }
    }
    return $month;
}

任何人都可以帮我吗?

[UPDATE]

我需要知道自从我的数据需要计算和报告以来,2月份是29还是28。 如果我在2月29日开始销售,我需要在我的报告中考虑,直到2月28日

4 个答案:

答案 0 :(得分:1)

date('t')为您提供给定月份的天数。

http://php.net/manual/en/function.date.php

所以不用if-elseif-else块,你可以这样做:

$month[] = date('m/Y',strtotime('+'.date('t').' days')); 

答案 1 :(得分:1)

您可以使用date("t")

<?php
  $number_of_days_in_month = date('t');
?>

答案 2 :(得分:0)

这很容易。 创建一个函数,用于计算当前年份是否可被4或400整除,并且不能被100整除。

让我澄清一些脚本代码的含义:

Firts,创建一个小函数来获取当前年份并计算它。它看起来像这样:

public function leap($ano)
{       
    $leap = false;    

    if ( (($ano%4) == 0 && ($ano%100) != 0) || ($ano%400) == 0 )    
    {       
        $leap = true;    
    }     
    return $leap;
}

现在您需要修改当前函数并添加我评论的以下代码:

public function checkMes(){
    $ano = date('Y'); //add this line
    $this->leap($ano); // add this line

    // ----------------------------------- Verificar se o mes tem 30 ou 31  ou 28 dias  -------------
    $month = array();
    for ($i = -10; $i < 0; $i++)
    {
        $check_month = date('m');

        if($check_month == '01' || $check_month == '03' || $check_month == '05' || $check_month == '07' || $check_month == '08' || $check_month         == '10' || $check_month == '12')
        {
            $month[] = date('m/Y',strtotime('+'.$i.' months + 1 days'));

        }elseif($check_month == '02'){

            if(isset($leap)){  //add this line
                $month[] = date('m/Y',strtotime('+'.$i.' months - 1 days'));   //add this line

            }else{   //add this line
                $month[] = date('m/Y',strtotime('+'.$i.' months - 2 days'));   //add this line

            }   //add this line

        }else{
            $month[] = date('m/Y',strtotime('+'.$i.' months')); 

        }
    }
    return $month;
}

希望它可以帮助你。

答案 3 :(得分:0)

我知道在PHP中解决它,你的条件是错误的:

试试这个:

$arr = array(1944, 2011, 2012, 2013, 2014, 1986, 1800, 1900, 2000, 2056);

    function leapYear($year){
        if(($year % 4) == 0 && ($year % 100) != 0){
            return true;
        }
        else{
            return false;
        }
    }

    for($i = 0; $i < count($arr) ; $i++){
        $r = leapYear($arr[$i]);

        if($r){
            echo 'Lepo year: ' . $arr[$i] . '<br>';
        }else{
            echo 'Not Leap year: ' . $arr[$i] . '<br>';
        }

    }