Currently seeking new career opportunities in web development, particularly with Laravel, Hire Me

Show working days of a month excluding weekends with PHP

David Carr

Tutorials PHP & MySQL

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();

<p>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</p>

 $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' && $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' && $day_name != 'Sat'){
            $workdays[] = $i;
        }

}

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

 

Laravel Modules Your Logo Your Logo Your Logo

Become a sponsor

Help support the blog so that I can continue creating new content!

Sponsor

My Latest Book

Modular Laravel Book - Laravel: The Modular way

Learn how to build modular applications with Laravel Find out more

Subscribe to my newsletter

Subscribe and get my books and product announcements.

Learn Laravel with Laracasts

Faster Laravel Hosting

© 2006 - 2024 DC Blog. All code MIT license. All rights reserved.