Calculate business days

后端 未结 30 2343
猫巷女王i
猫巷女王i 2020-11-22 05:16

I need a method for adding \"business days\" in PHP. For example, Friday 12/5 + 3 business days = Wednesday 12/10.

At a minimum I need the code to understand weekend

30条回答
  •  说谎
    说谎 (楼主)
    2020-11-22 05:55

    date_default_timezone_set('America/New_York');
    
    
    /** Given a number days out, what day is that when counting by 'business' days
      * get the next business day. by default it looks for next business day
      * ie calling  $date = get_next_busines_day(); on monday will return tuesday
      *             $date = get_next_busines_day(2); on monday will return wednesday
      *             $date = get_next_busines_day(2); on friday will return tuesday
      *
      * @param $number_of_business_days (integer)       how many business days out do you want
      * @param $start_date (string)                     strtotime parseable time value
      * @param $ignore_holidays (boolean)               true/false to ignore holidays
      * @param $return_format (string)                  as specified in php.net/date
     */
    function get_next_business_day($number_of_business_days=1,$start_date='today',$ignore_holidays=false,$return_format='m/d/y') {
    
        // get the start date as a string to time
        $result = strtotime($start_date);
    
        // now keep adding to today's date until number of business days is 0 and we land on a business day
        while ($number_of_business_days > 0) {
            // add one day to the start date
            $result = strtotime(date('Y-m-d',$result) . " + 1 day");
    
            // this day counts if it's a weekend and not a holiday, or if we choose to ignore holidays
            if (is_weekday(date('Y-m-d',$result)) && (!(is_holiday(date('Y-m-d',$result))) || $ignore_holidays) ) 
                $number_of_business_days--;
    
        }
    
        // when my $number of business days is exausted I have my final date
    
        return(date($return_format,$result));
    }
    
        function is_weekend($date) {
        // return if this is a weekend date or not.
        return (date('N', strtotime($date)) >= 6);
    }
    
    function is_weekday($date) {
        // return if this is a weekend date or not.
        return (date('N', strtotime($date)) < 6);
    }
    
    function is_holiday($date) {
        // return if this is a holiday or not.
    
        // what are my holidays for this year
        $holidays = array("New Year's Day 2011" => "12/31/10",
                            "Good Friday" => "04/06/12",
                            "Memorial Day" => "05/28/12",
                            "Independence Day" => "07/04/12",
                            "Floating Holiday" => "12/31/12",
                            "Labor Day" => "09/03/12",
                            "Thanksgiving Day" => "11/22/12",
                            "Day After Thanksgiving Day" => "11/23/12",
                            "Christmas Eve" => "12/24/12",
                            "Christmas Day" => "12/25/12",
                            "New Year's Day 2012" => "01/02/12",
                            "New Year's Day 2013" => "01/01/13"
                            );
    
        return(in_array(date('m/d/y', strtotime($date)),$holidays));
    }
    
    
    print get_next_business_day(1) . "\n";
    

提交回复
热议问题