Show working days of a month excluding weekends with PHP

David Carr

2 min read - 27th Mar, 2012

This tutorial will show you how to get the individual working dates of a month, whilst removing weekends, this is useful for creating charts for instance.

First create an empty array it will later store the dates.

$workdays = array();

Next I'm making use of a native function to inform php which type of calendar were working this, in this case its an Gregorian Calendar

 $type = CAL_GREGORIAN;

Next set the current month and year and get the total number of days in the current month using another inbuilt function: cal_days_in_month.

$month = date('n'); // Month ID, 1 through to 12.
    $year = date('Y'); // Year in 4 digit 2009 format.
    $day_count = cal_days_in_month($type, $month, $year); // Get the amount of days

Next create a for loop to loop through the number of days of the month then format the date for each day extract the day name and check the day is not a Sun or Sat then add that date to an array called $workdays

//loop through all days
for ($i = 1; $i <= $day_count; $i++) {

        $date = $year.'/'.$month.'/'.$i; //format date
        $get_name = date('l', strtotime($date)); //get week day
        $day_name = substr($get_name, 0, 3); // Trim day name to 3 chars

        //if not a weekend add day to array
        if($day_name != 'Sun' &amp;&amp; $day_name != 'Sat'){
            $workdays[] = $i;
        }

}

From here you've got all the dates stored in an array to use.

To just see the array contents we can use print_r:

print_r($workdays);

To use the array you could use a foreach:

 foreach ($workdays as $key=>$value) {
        //do something here
    }

Here's the full script:

$workdays = array();
$type = CAL_GREGORIAN;
$month = date('n'); // Month ID, 1 through to 12.
$year = date('Y'); // Year in 4 digit 2009 format.
$day_count = cal_days_in_month($type, $month, $year); // Get the amount of days

//loop through all days
for ($i = 1; $i <= $day_count; $i++) {

        $date = $year.'/'.$month.'/'.$i; //format date
        $get_name = date('l', strtotime($date)); //get week day
        $day_name = substr($get_name, 0, 3); // Trim day name to 3 chars

        //if not a weekend add day to array
        if($day_name != 'Sun' &amp;&amp; $day_name != 'Sat'){
            $workdays[] = $i;
        }

}

// look at items in the array uncomment the next line
   //print_r($workdays);

 

0 comments
Add a comment

Copyright © 2006 - 2024 DC Blog - All rights reserved.