Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 日期计算总天数_Php - Fatal编程技术网

Php 日期计算总天数

Php 日期计算总天数,php,Php,我有这段代码,它在某些日期运行良好,我不明白为什么,下面的代码应该计算总天数。如果我选择leavefrom=2014-04-21和leaveto=2014-05-02,则总共有8天,但应该是9天 这是日历:- function total_day($leavefrom, $leaveto){ $start_date=strtotime($leavefrom); $cur_day=$start_date; $end_day=strtotime

我有这段代码,它在某些日期运行良好,我不明白为什么,下面的代码应该计算总天数。如果我选择leavefrom=2014-04-21和leaveto=2014-05-02,则总共有8天,但应该是9天

这是日历:-

    function total_day($leavefrom, $leaveto){
        $start_date=strtotime($leavefrom);
        $cur_day=$start_date;
        $end_day=strtotime($leaveto);
        $count=0;

        $holiday=array("2014-05-01"=>"Labour Day", "2014-08-31"=>"Independence Day", "2014-12-25"=>"Christmas");

        while(1){

            //echo date("Y/m/d", $cur_day)."<br/>";
            $cur_day=$cur_day +(3600*24);
            //echo $count."S--".date("Y-m-d", $cur_day)."<-----E--".$end_day;


            $day_of_week=date('w', $cur_day);
            //echo "day_of_week-----".$day_of_week."<br/>";
            if ($day_of_week == 0 || $day_of_week == 6) {
                //No Operation
            }else if(array_key_exists(date("Y-m-d", $cur_day), $holiday)){
                //echo "Holiday because of ".$holiday[date("Y-m-d", $cur_day)];
            }else{
                $count++;
            }
            //echo "Total day--".$count."<br/><br/>";

            if(($cur_day==($end_day+(3600*24)))||($cur_day>$end_day)){
                break;
            }

        }
        //$count = $count + 1;
        return $count;

    }

$totaldays = total_day($leavefrom, $leaveto);

函数总天数($leavefrom,$leaveto){
$start_date=strottime($leavefrom);
$cur\u day=$start\u date;
$end_day=strotime($leaveto);
$count=0;
$holiday=数组(“2014-05-01”=>“劳动节”、“2014-08-31”=>“独立日”、“2014-12-25”=>“圣诞节”);
而(1){
//回音日期(“Y/m/d”,当前日期)。“
”; $cur_day=$cur_day+(3600*24);
//echo$count.“S--”date(“Y-m-d”,“cur_day”)”我看不出有任何错误。从
2014-04-21
2014-05-02
有11天,其中有2个周末和1个假期(
2014-05-01
),因此使
11天-3天=8天

但如果您还想包括开始日期,则可以使用以下选项:

while(1){       
    if($cur_day>$end_day){
        break;
    }
    $day_of_week=date('l', $cur_day);
    if (in_array($day_of_week,array('Saturday','Sunday'))) {
        // NO operation
    }else if(array_key_exists(date("Y-m-d", $cur_day), $holiday)){
        // NO operation
    }else{
        $count++;
    }
    $cur_day=$cur_day +(3600*24);

}

为什么不使用标准的
DateTime::diff
(或
date\u diff
)?看看这个来实现你所需要的:@TravelingTechGuy不,我不能,我需要从开始日期一直数到结束日期,如果我们计算它,它实际上会产生不同的值。很好。谢谢你的解决方案。