Get date range between two dates excluding weekends

后端 未结 4 1720
情话喂你
情话喂你 2020-11-29 06:16

Given the following dates:

6/30/2010 - 7/6/2010

and a static variable:

$h = 7.5

I need to create an array

4条回答
  •  清歌不尽
    2020-11-29 06:43

    This is gnud's answer but as a function (also added an option to exclude the current day from the calculation):

    (examples below)

    public function getNumberOfDays($startDate, $endDate, $hoursPerDay="7.5", $excludeToday=true)
    {
        // d/m/Y
        $start = new DateTime($startDate);
        $end = new DateTime($endDate);
        $oneday = new DateInterval("P1D");
    
        $days = array();
    
        /* Iterate from $start up to $end+1 day, one day in each iteration.
        We add one day to the $end date, because the DatePeriod only iterates up to,
        not including, the end date. */
        foreach(new DatePeriod($start, $oneday, $end->add($oneday)) as $day) {
            $day_num = $day->format("N"); /* 'N' number days 1 (mon) to 7 (sun) */
            if($day_num < 6) { /* weekday */
                $days[$day->format("Y-m-d")] = $hoursPerDay;
            } 
        }    
    
        if ($excludeToday)
            array_pop ($days);
    
        return $days;       
    }
    

    And to use it:

    $date1 = "2012-01-12";
    $date2 = date('Y-m-d'); //today's date  
    
    $daysArray = getNumberOfDays($date1, $date2);
    
    echo 'hours: ' . array_sum($daysArray);
    echo 'days: ' . count($daysArray);
    

提交回复
热议问题