Find difference between two dates in C++

In this tutorial, we will learn how to find the difference between two dates in C++. Before proceeding further first, let’s go through some basic information related to the topic.

Basic information related to the topic

List of months and corresponding no. of days:

Find difference between two dates in C++

Leap Year: is a year that comes after every 4 years. Generally, a year is consisting of 365 number of days in it but a leap year has 366 days in it. The extra day is designated as February 29.

(*Note: Century years are not leap years if they are not divisible by 400).

For ex.   1600 is a century year as well as a leap year. Because it is divisible by 400. On the other hand, 1700 is a century year, not a leap year. Because it is not divisible by 400.

Things we should know:

  1.  Year ‘0’ doesn’t exist.
  2.  29th Feb exists only in leap years.

How to add days to a date in C++

Program to find the difference between two dates in C++

Like other programming languages, we can’t simply use any single built-in function to do our task. Here is our cpp code for this program:

#include <iostream>
using namespace std;

int check_leap_year(int year)
{
    if( year%4==0 && year%100!=0 || year%400==0 )   //if year is a leap year
    return 1;
    
    else
    return 0;
}

int no_of_days_in_month(int month, int year)
{
    // jan, march, may, july, aug, oct, dec contains 31 days
    if( month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12 )
        return 31;
        
    // april, jun, sept, nov contains 30 days
    if( month==4 || month==6 || month==9 || month==11 )
        return 30;
    
    if( month==2 )
    {
        int n=check_leap_year(year);
        if(n==1)    // if year is a leap year then Feb will contain 29 days, otherwise it contains 28 days
        return 29;
        
        else
        return 28;
    }
}

long long int difference_of_days(int day1,int month1, int year1, int day2, int month2, int year2)
{
    if(year1==year2)
    {
        if(month1==month2)
        {
            if(day1==day2)      //for same dates
                return 0;
            else
                return abs(day1-day2);  //for same year, same month but diff days
        }
        else if(month1<month2)
        {
            int result=0;
            for(int i=month1; i<month2; i++)
            result=result+no_of_days_in_month(i,year1);
                
            if(day1==day2)      //for same year, same day but diff month 
                return result;
            else if(day1<day2)
            {
                result=result+(day2-day1);
                return result;
            }
            else
            {
                result=result-(day1-day2);
                return result;
            }
        }
        else
        {
            int result=0;
            for(int i=month2; i<month1; i++)
            result=result+no_of_days_in_month(i,year1);
                
            if(day1==day2)
                return result;
            else if(day2<day1)
            {
                result=result+(day1-day2);
                return result;
            }
            else
            {
                result=result-(day2-day1);
                return result;
            }
        }
    }
    else if(year1<year2)
    {
        int temp=0;
        for(int i=year1; i<year2; i++)
        {
            if(check_leap_year(i))
                temp=temp+366;
            else
                temp=temp+365;
        }
        
        if(month1==month2)      
        {
            if(day1==day2)      //for same month, same day but diff year
                return temp;
            else if(day1<day2)
                return temp+(day2-day1);
            else
                return temp-(day1-day2);
        }
        else if(month1<month2)
        {
            int result=0;
            for(int i=month1; i<month2; i++)
            result=result+no_of_days_in_month(i,year2);
                
            if(day1==day2)      // for same day, diff year and diff month
                return temp+result;
            else if(day1<day2)
            {
                result=result+(day2-day1);
                return temp+result;
            }
            else
            {
                result=result-(day1-day2);
                return temp+result;
            }
        }
        else
        {
            int result=0;
            for(int i=month2; i<month1; i++)
            result=result+no_of_days_in_month(i,year2);
                
            if(day1==day2)
                return temp-result;
            else if(day2<day1)
            {
                result=result+(day1-day2);
                return temp-result;
            }
            else
            {
                result=result-(day2-day1);
                return temp-result;
            }
        }
    }
    else
    {
        int temp=0;
        for(int i=year2; i<year1; i++)
        {
            if(check_leap_year(i))
                temp=temp+366;
            else
                temp=temp+365;
        }
        
        if(month1==month2)
        {
            if(day1==day2)      // for same day, same month but diff year
                return temp;
            else if(day2<day1)
                return temp+(day1-day2);
            else
                return temp-(day2-day1);
        }
        else if(month2<month1)
        {
            int result=0;
            for(int i=month2; i<month1; i++)
            result=result+no_of_days_in_month(i,year1);
                
            if(day1==day2)
                return temp+result;
            else if(day2<day1)
            {
                result=result+(day1-day2);
                return temp+result;
            }
            else
            {
                result=result-(day2-day1);
                return temp+result;
            }
        }
        else
        {
            int result=0;
            for(int i=month1; i<month2; i++)
            result=result+no_of_days_in_month(i,year1);
                
            if(day1==day2)      // for same day, diff year and diff month
                return temp-result;
            else if(day1<day2)
            {
                result=result+(day2-day1);
                return temp-result;
            }
            else
            {
                result=result-(day1-day2);
                return temp-result;
            }
        }
    }
}

int main()
{
    int day1,day2,month1,month2,year1,year2;
    int n;
    
    // Inputting both dates
    cout<<"Enter the first date=>\n";
    cout<<"Day :";
    cin>>day1;
    cout<<"Month (ex: for january write '1') :";
    cin>>month1;
    cout<<"Year :";
    cin>>year1;
    n=no_of_days_in_month(month1,year1);
    
    // checking if entered date is valid or not
    if(day1<1 || day1>n || month1<1 || month1 >12 || year1 <1)
    {
        cout<<"\nEntered date is not valid";
        exit(0);    // exiting from the program if the entered date is invalid
    }
    
    cout<<"\nEnter the second date=>\n";
    cout<<"Day :";
    cin>>day2;
    cout<<"Month (ex: for january write '1') :";
    cin>>month2;
    cout<<"Year :";
    cin>>year2;
    n=no_of_days_in_month(month2,year2);
    
    if(day2<1 || day2>n || month2<1 || month2 >12 || year2 <1)
    {
        cout<<"\nEntered date is not valid";
        exit(0);
    }
    
    // Counting the difference between 2 dates in terms of no of days
    long long int diff = difference_of_days(day1, month1, year1, day2, month2, year2);
    cout<<"\nDifference between 2 dates in terms of =>";
    cout<<"\nNo. of days :"<<diff<<" days";
    cout<<"\nNo. of hours :"<<diff*24<<" hours";
    
    return 0;
}

Input/Output:

Enter the first date=>                                                                                                           
Day :1                                                                                                                           
Month (ex: for january write '1') :4                                                                                             
Year :1650 
                                                                                                                                                                                                                                                     
Enter the second date=>                                                                                                          
Day :17                                                                                                                          
Month (ex: for january write '1') :7                                                                                             
Year :2019    
                                                                                                                   
Difference between 2 dates in terms of =>                                                                                        
No. of days :134881 days                                                                                                              
No. of hours :3237144 hours

You may also read:

  1. Find determinant of a matrix in C++
  2. Relative Sorting Algorithm and Implementation in C++

Leave a Reply

Your email address will not be published. Required fields are marked *