Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8131257
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 6, 20262026-06-06T09:02:24+00:00 2026-06-06T09:02:24+00:00

I have the strangest issue. I have a script that calculates what the current

  • 0

I have the strangest issue. I have a script that calculates what the current work day is in a month along with the total amount of working days for the month. For example, today June 25, the script would output “day 17/21”.

The strange thing is, for months where the 12th falls on a monday, from the 12th till the end of the month, the current work day shows as 0.0417 days less than what it actually is. For example, for March 11th (a sunday) it shows “7/22”. But for March 12th, it shows “7.95833333/22”

Below is my code for the script which I had found on a post somewhere on the internet. Every other time it works perfectly except for this odd occasion.

//##########################################################
//Date Calculations
//##########################################################

    $datepicker = $_POST['datepicker'];
    $dpyear = date("Y", strtotime($datepicker));
    $dpmonth = date("m", strtotime($datepicker));
    $dpday = date("d", strtotime($datepicker));

        $end = date('Y/m/d', mktime(0, 0, 0, $dpmonth, $dpday, $dpyear));       // seconds * minutes * hours * days
        $first = date('Y/m/d', mktime(0, 0, 0, $dpmonth, 1, $dpyear));
        $firstOfYear = date('Y/m/d', mktime(0, 0, 0, 1, 1, $dpyear));
        $last = date('Y/m/d', mktime(0, 0, 0, $dpmonth + 1, 0, $dpyear));
        $firstprevyear = date('Y/m/d', mktime(0, 0, 0, $dpmonth, 1, $dpyear-1));
        $lastprevyear = date('Y/m/d', mktime(0, 0, 0, $dpmonth + 1, 0, $dpyear-1));
        $prevyearmonth = date('M\'y', mktime(0, 0, 0, $dpmonth + 1, 0, $dpyear-1));

        $prevyeardate = "sojd.InvoiceDate >= '$firstprevyear' and sojd.InvoiceDate <= '$lastprevyear' ";
        $mtddaterange = "sojd.InvoiceDate >= '$first' and sojd.InvoiceDate <= '$end' ";
        $ytddaterange = "sojd.InvoiceDate >= '$firstOfYear' and sojd.InvoiceDate <= '$end' ";



        if (date("w", strtotime($datepicker)) == 1) {       // if today is Monday, combine weekend and Monday's numbers
            $startDate = date('Y/m/d', mktime(0, 0, 0, $dpmonth, $dpday - 2, $dpyear));
            $prevdaterange = "sojd.InvoiceDate >= '$startDate' and sojd.InvoiceDate <= '$end'";
            $daterange = "sojd.InvoiceDate >= '$startDate' and sojd.InvoiceDate <= '$end'";
            $params = array($startDate, $end);
        } else {
            $prevdaterange = "sojd.InvoiceDate = '$end' ";
            $daterange = "sojd.InvoiceDate = '$end'";
            $params = array($end);
        }



    $holidays=array("2012-01-02","2012-05-28","2012-07-04","2012-09-03","2012-11-22","2012-12-25");

function getWorkingDays($startDate,$endDate,$holidays){
    // do strtotime calculations just once
    $endDate = strtotime($endDate);
    $startDate = strtotime($startDate);


    //The total number of days between the two dates. We compute the no. of seconds and divide it to 60*60*24
    //We add one to inlude both dates in the interval.
    $days = ($endDate - $startDate) / 86400 + 1;

    $no_full_weeks = floor($days / 7);
    $no_remaining_days = fmod($days, 7);

    //It will return 1 if it's Monday,.. ,7 for Sunday
    $the_first_day_of_week = date("N", $startDate);
    $the_last_day_of_week = date("N", $endDate);

    //---->The two can be equal in leap years when february has 29 days, the equal sign is added here
    //In the first case the whole interval is within a week, in the second case the interval falls in two weeks.
    if ($the_first_day_of_week <= $the_last_day_of_week) {
        if ($the_first_day_of_week <= 6 && 6 <= $the_last_day_of_week) $no_remaining_days--;
        if ($the_first_day_of_week <= 7 && 7 <= $the_last_day_of_week) $no_remaining_days--;
    }
    else {
        // (edit by Tokes to fix an edge case where the start day was a Sunday
        // and the end day was NOT a Saturday)

        // the day of the week for start is later than the day of the week for end
        if ($the_first_day_of_week == 7) {
            // if the start date is a Sunday, then we definitely subtract 1 day
            $no_remaining_days--;

            if ($the_last_day_of_week == 6) {
                // if the end date is a Saturday, then we subtract another day
                $no_remaining_days--;
            }
        }
        else {
            // the start date was a Saturday (or earlier), and the end date was (Mon..Fri)
            // so we skip an entire weekend and subtract 2 days
            $no_remaining_days -= 2;
        }
    }

    //The no. of business days is: (number of weeks between the two dates) * (5 working days) + the remainder
//---->february in none leap years gave a remainder of 0 but still calculated weekends between first and last day, this is one way to fix it
   $workingDays = $no_full_weeks * 5;
    if ($no_remaining_days > 0 )
    {
      $workingDays += $no_remaining_days;
    }

    //We subtract the holidays
    foreach($holidays as $holiday){
        $time_stamp=strtotime($holiday);
        //If the holiday doesn't fall in weekend
        if ($startDate <= $time_stamp && $time_stamp <= $endDate && date("N",$time_stamp) != 6 && date("N",$time_stamp) != 7)
            $workingDays--;
    }

    return $workingDays;
}
    $currSalesDay = getWorkingDays($first,$end,$holidays);
    $totalSalesDay = round(getWorkingDays($first,$last,$holidays),0);
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-06T09:02:27+00:00Added an answer on June 6, 2026 at 9:02 am

    If you’re doing / 86400 stuff, you’re going to run into leap second issues. http://en.wikipedia.org/wiki/Leap_second

    It’s better to use something like strtotime('+1 day', $timestamp) or the DateTime class for moving from day to day or comparing dates.

    At the very least, if you’re dealing with whole day increments, just round off the results.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a strange issue . I am currently working on a mail app
I have a strange issue that has arisen recently: Whenever I enter text, even
I have the script that works with pixels in html5 canvas element. And there
I have a script that I run in terminal that runs the scan-build code
I have issue with a strange url request to my site.. that may come
I have got a very strange input issue in which it seems that my
I have a kind of strange issue. In my bash script or Makefile, using
I'm having a strange issue that I think I have a workaround for, but
I have a simple image upload script that uses SimpleImage.php (http://www.white-hat-web-design.co.uk/blog/resizing-images-with-php/) to resize and
I'm running into a very strange issue that I have found no explanation for

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.