Find number of days between two given dates

Given two dates, find total number of days between them. The count of days must be calculated in O(1) time and O(1) auxiliary space.

Examples:

Input: dt1 = {10, 2, 2014}
       dt2 = {10, 3, 2015}
Output: 393
dt1 represents "10-Feb-2014" and dt2 represents "10-Mar-2015"
The difference is 365 + 28

Input: dt1 = {10, 2, 2000}
       dt2 = {10, 3, 2000}
Output: 29
Note that 2000 is a leap year

Input: dt1 = {10, 2, 2000}
       dt2 = {10, 2, 2000}
Output: 0
Both dates are same

Input:   dt1 = {1, 2, 2000};
         dt2 = {1, 2, 2004};
Output: 1461
Number of days is 365*4 + 1

We strongly recommend that you click here and practice it, before moving on to the solution.


One Naive Solution is to start from dt1 and keep counting days till dt2 is reached. This solution requires more than O(1) time.
A Better and Simple solution is to count total number of days before dt1 from i.e., total days from 00/00/0000 to dt1, then count total number of days before dt2. Finally return the difference between two counts.

Let the given two dates be "1-Feb-2000" and "1-Feb-2004"
dt1 = {1, 2, 2000};
dt2 = {1, 2, 2004};

Count number of days before dt1. Let this count be n1.
Every leap year adds one extra day (29 Feb) to total days.

n1 = 2000*365 + 31 + 1 + Number of leap years 

Count of leap years for a date 'd/m/y' can be calculated 
using following formula:
Number leap years 
             = y/4 - y/100 + y/400 if m > 2
             = (y-1)/4 - (y-1)/100 + (y-1)/400 if m <= 2
All above divisions must be done using integer arithmetic
so that the remainder is ignored.

For 01/01/2000, leap year count is 1999/4 - 1999/100 
+ 1999/400 which is 499 - 19 + 4 = 484
Therefore n1 is 2000*365 + 31 + 1 + 484
                                  
Similarly, count number of days before dt2. Let this
count be n2.

Finally return n2-n1

Below is the implementation of above idea.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program two find number of days between two given dates
#include<iostream>
using namespace std;
  
// A date has day 'd', month 'm' and year 'y'
struct Date
{
    int d, m, y;
};
  
// To store number of days in all months from January to Dec.
const int monthDays[12] = {31, 28, 31, 30, 31, 30,
                           31, 31, 30, 31, 30, 31};
  
// This function counts number of leap years before the
// given date
int countLeapYears(Date d)
{
    int years = d.y;
  
    // Check if the current year needs to be considered
    // for the count of leap years or not
    if (d.m <= 2)
        years--;
  
    // An year is a leap year if it is a multiple of 4,
    // multiple of 400 and not a multiple of 100.
    return years / 4 - years / 100 + years / 400;
}
  
// This function returns number of days between two given
// dates
int getDifference(Date dt1, Date dt2)
{
    // COUNT TOTAL NUMBER OF DAYS BEFORE FIRST DATE 'dt1'
  
    // initialize count using years and day
    long int n1 = dt1.y*365 + dt1.d;
  
    // Add days for months in given date
    for (int i=0; i<dt1.m - 1; i++)
        n1 += monthDays[i];
  
    // Since every leap year is of 366 days,
    // Add a day for every leap year
    n1 += countLeapYears(dt1);
  
    // SIMILARLY, COUNT TOTAL NUMBER OF DAYS BEFORE 'dt2'
  
    long int n2 = dt2.y*365 + dt2.d;
    for (int i=0; i<dt2.m - 1; i++)
        n2 += monthDays[i];
    n2 += countLeapYears(dt2);
  
    // return difference between two counts
    return (n2 - n1);
}
  
// Driver program
int main()
{
    Date dt1 = {1, 2, 2000};
    Date dt2 = {1, 2, 2004};
  
    cout << "Difference between two dates is " << getDifference(dt1, dt2);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program two find number of 
// days between two given dates
  
class GFG 
{
  
    // A date has day 'd', month 'm' and year 'y'
    static class Date 
    {
        int d, m, y;
  
        public Date(int d, int m, int y)
        {
            this.d = d;
            this.m = m;
            this.y = y;
        }
  
    };
  
    // To store number of days in 
    // all months from January to Dec.
    static int monthDays[] = {31, 28, 31, 30, 31, 30,
                            31, 31, 30, 31, 30, 31};
  
    // This function counts number of 
    // leap years before the given date
    static int countLeapYears(Date d) 
    {
        int years = d.y;
  
        // Check if the current year needs to be considered
        // for the count of leap years or not
        if (d.m <= 2
        {
            years--;
        }
  
        // An year is a leap year if it is a multiple of 4,
        // multiple of 400 and not a multiple of 100.
        return years / 4 - years / 100 + years / 400;
    }
  
    // This function returns number 
    // of days between two given dates
    static int getDifference(Date dt1, Date dt2)
    {
        // COUNT TOTAL NUMBER OF DAYS BEFORE FIRST DATE 'dt1'
  
        // initialize count using years and day
        int n1 = dt1.y * 365 + dt1.d;
  
        // Add days for months in given date
        for (int i = 0; i < dt1.m - 1; i++) 
        {
            n1 += monthDays[i];
        }
  
        // Since every leap year is of 366 days,
        // Add a day for every leap year
        n1 += countLeapYears(dt1);
  
        // SIMILARLY, COUNT TOTAL NUMBER OF DAYS BEFORE 'dt2'
        int n2 = dt2.y * 365 + dt2.d;
        for (int i = 0; i < dt2.m - 1; i++)
        {
            n2 += monthDays[i];
        }
        n2 += countLeapYears(dt2);
  
        // return difference between two counts
        return (n2 - n1);
    }
  
    // Driver code
    public static void main(String[] args) 
    {
        Date dt1 = new Date(1, 2, 2000);
        Date dt2 = new Date(1, 2, 2004);
        System.out.println("Difference between two dates is "
                            getDifference(dt1, dt2));
    }
  
// This code is contributed by 29AjayKumar

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 program two find number of 
# days between two given dates 
  
# A date has day 'd', month 
# 'm' and year 'y'
class Date: 
    def __init__(self, d, m, y): 
        self.d = d         
        self.m =
        self.y =
  
# To store number of days in
# all months from January to Dec. 
monthDays = [31, 28, 31, 30, 31, 30
             31, 31, 30, 31, 30, 31 ]
  
# This function counts number of 
# leap years before the given date 
def countLeapYears(d):
      
    years = d.y 
      
    # Check if the current year needs 
    # to be considered for the count
    # of leap years or not 
    if (d.m <= 2) :
        years -= 1
          
    # An year is a leap year if it is a
    # multiple of 4, multiple of 400 and
    # not a multiple of 100. 
    return int(years / 4 - years / 100 + 
                           years / 400 )
  
# This function returns number of 
# days between two given dates 
def getDifference(dt1, dt2) :
  
    # COUNT TOTAL NUMBER OF DAYS 
    # BEFORE FIRST DATE 'dt1' 
  
    # initialize count using years and day 
    n1 = dt1.y * 365 + dt1.d 
  
    # Add days for months in given date 
    for i in range(0, dt1.m - 1) :
        n1 += monthDays[i] 
  
    # Since every leap year is of 366 days, 
    # Add a day for every leap year 
    n1 += countLeapYears(dt1) 
  
    # SIMILARLY, COUNT TOTAL NUMBER 
    # OF DAYS BEFORE 'dt2' 
    n2 = dt2.y * 365 + dt2.d 
    for i in range(0, dt2.m - 1) :
        n2 += monthDays[i] 
    n2 += countLeapYears(dt2) 
  
    # return difference between 
    # two counts 
    return (n2 - n1) 
  
# Driver Code
dt1 = Date(1, 2, 2000 )
dt2 = Date(1, 2, 2004 )
  
print("Difference between two dates is"
                getDifference(dt1, dt2))
  
# This code is contributed by Smitha

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program two find number of 
// days between two given dates
using System;
  
class GFG 
{
  
    // A date has day 'd', month 'm' and year 'y'
    public class Date 
    {
        public int d, m, y;
  
        public Date(int d, int m, int y)
        {
            this.d = d;
            this.m = m;
            this.y = y;
        }
  
    };
  
    // To store number of days in 
    // all months from January to Dec.
    static int []monthDays = {31, 28, 31, 30, 31, 30,
                            31, 31, 30, 31, 30, 31};
  
    // This function counts number of 
    // leap years before the given date
    static int countLeapYears(Date d) 
    {
        int years = d.y;
  
        // Check if the current year 
        // needs to be considered
        // for the count of leap years or not
        if (d.m <= 2) 
        {
            years--;
        }
  
        // An year is a leap year if it is 
        // a multiple of 4, multiple of 400
        // and not a multiple of 100.
        return years / 4 - years / 100 + years / 400;
    }
  
    // This function returns number 
    // of days between two given dates
    static int getDifference(Date dt1, Date dt2)
    {
        // COUNT TOTAL NUMBER OF DAYS 
        // BEFORE FIRST DATE 'dt1'
  
        // initialize count using years and day
        int n1 = dt1.y * 365 + dt1.d;
  
        // Add days for months in given date
        for (int i = 0; i < dt1.m - 1; i++) 
        {
            n1 += monthDays[i];
        }
  
        // Since every leap year is of 366 days,
        // Add a day for every leap year
        n1 += countLeapYears(dt1);
  
        // SIMILARLY, COUNT TOTAL 
        // NUMBER OF DAYS BEFORE 'dt2'
        int n2 = dt2.y * 365 + dt2.d;
        for (int i = 0; i < dt2.m - 1; i++)
        {
            n2 += monthDays[i];
        }
        n2 += countLeapYears(dt2);
  
        // return difference between two counts
        return (n2 - n1);
    }
  
    // Driver code
    public static void Main(String[] args) 
    {
        Date dt1 = new Date(1, 2, 2000);
        Date dt2 = new Date(1, 2, 2004);
        Console.WriteLine("Difference between two dates is "
                            getDifference(dt1, dt2));
    }
  
// This code is contributed by PrinciRaj1992

chevron_right



Output:

Difference between two dates is 1461

Note : The above program follows the Gregorian Calender from the beginning of the time.

This article is contributed by Abhay Rathi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above



My Personal Notes arrow_drop_up