12,404,895 members (69,557 online)
Tip/Trick
alternative version

53.4K views
46 bookmarked
Posted

# Calculate Difference Between Two Dates in Day, Week, Month, and Year Parts

, 18 Dec 2013 CPOL
 Rate this:
Calculate difference between two dates in day, week, month, and year parts.

## Introduction

During my investigation of the `DateTime` and `TimeSpan` classes, I faced the following question several times, and unfortunately, I didn't find an answer to it.

How can I get the difference between two dates in number of days, weeks, months, and years? I tried to use the `Subtract` method of the `DateTime` class, and it gave me the difference in `TimeSpan`, from which I can get the duration in days, hours, and so on... but how can I get the difference in larger date parts?

I found it a very common requirement to display the date difference between two dates with high precision, considering leap years and the number of days in each month.

So I decided to write my own library (DateCalculator_Lib) which provides to its user a complete set of properties for all required date parts (days, weeks, months, years) along with some extra properties like number of leap years and a collection containing the accrual of each month during the difference period, and a group of properties representing each date part total accrual in the difference period, like total number of days, months,......etc.

## Using the Code

All you need is to add a reference to DateCalculator.dll in your .NET project and the `using` statement for the `DateCalculator` namespace, then create an object from the `DateCalculator` class which will need the start and end dates in its constructor.

After that, just call the `public CalculateDateDifference` method from your object, and it will calculate each date difference part and assign it to the appropriate property.

The attached demo project contains all the previously explained steps.

```//Add the using statement
using DateCalculator;

private void button1_Click(object sender, EventArgs e)
{
//create the object
DateCalculator.DateCalculator DC = new DateCalculator.DateCalculator
( this.dateTimePicker1.Value, this.dateTimePicker2.Value);

//call the method
DC.CalculateDateDifference();
// use the read only properties
this.day_txt.Text = DC.Days.ToString();
this.week_txt.Text = DC.Weeks.ToString();
this.month_txt.Text = DC.Months.ToString();
this.year_txt.Text = DC.Years.ToString();
}```

#### Algorithm Explanation

This library depends on a well known algorithm called "Goal Seek" algorithm; we start from the "Start Date" and go on until we reach the "End Date", which is our goal...during the journey, we collect information by accumulating days and months and leap years inside the period between the start and end dates.

The algorithm depends on a container "Integer array" that contains the number of days in each month except February, as this month is the differentiator between normal and leap years.

And the algorithm logical steps are as follows:

1. If our Goal -->>"End date" is not reached, continue.
2. Check if current month is February or not, and accumulate days and months.
3. Update the `public `properties.
4. Check the termination condition "Did we reach the goal or not".
5. If not, get the next month index and continue in the loop.
6. If we exceed the goal, we seek it by going forward and backward until we stop on the end date.

Finally, after finishing this loop, all `public `properties will contain the accumulated information collected through the cycle.

## History

• 19th November, 2009: Initial post

## Share

 Software Developer International TurnKey Systems (ITS) Egypt
our work represents us

## You may also be interested in...

 First Prev Next
 Unable to download Files. Get blank Page. Len202021-Feb-14 15:11 Len2020 21-Feb-14 15:11
 Re: Unable to download Files. Get blank Page. Member 778232730-Apr-14 15:50 Member 7782327 30-Apr-14 15:50
 Re: Unable to download Files. Get blank Page. Len202030-Apr-14 15:56 Len2020 30-Apr-14 15:56
 Re: Unable to download Files. Get blank Page. Member 778232730-Apr-14 16:03 Member 7782327 30-Apr-14 16:03
 Days in minus (-) hdamis17-Feb-14 1:17 hdamis 17-Feb-14 1:17
 First and Last Date. ZamirF18-Dec-13 7:51 ZamirF 18-Dec-13 7:51
 wrong result returned when from date is 10/10/2004 and to date is 28/02/2005 Vasudevan Kannan2-Jan-12 13:45 Vasudevan Kannan 2-Jan-12 13:45
 Re: wrong result returned when from date is 10/10/2004 and to date is 28/02/2005 Mahmoud Fathy Afify18-Dec-13 2:09 Mahmoud Fathy Afify 18-Dec-13 2:09
 Re: wrong result returned when from date is 10/10/2004 and to date is 28/02/2005 Mahmoud Fathy Afify18-Dec-13 3:21 Mahmoud Fathy Afify 18-Dec-13 3:21
 Re: wrong result returned when from date is 10/10/2004 and to date is 28/02/2005 Vasudevan Kannan30-Dec-13 20:25 Vasudevan Kannan 30-Dec-13 20:25
 error I think galache23-Dec-10 6:20 galache 23-Dec-10 6:20
 Re: error I think Gustav Brock23-Dec-13 3:03 Gustav Brock 23-Dec-13 3:03
 Why not... kasparovthe220-Nov-09 2:19 kasparovthe2 20-Nov-09 2:19
 Re: Why not... Mahmoud Fathy Afify21-Nov-09 22:00 Mahmoud Fathy Afify 21-Nov-09 22:00
 Because DateTime.Subtract() only gives you the difference in term of number of days, but if your needs requires more specific level of details like "How many leap years in this period?", or "What is the total number of weeks months and years are represented by this time period?" , or "How many number of occurance of November??" also the main idea is about getting the date difference in more usable form.... imagin thie case when i ask you the following question "What is the difference between 13/2/2005 and todays Date?" and the reply is 1743 days or 4 years, 9 months,1 week and 2 days
 Re: Why not... bkyee18-Dec-13 23:23 bkyee 18-Dec-13 23:23
 Re: Why not... Gustav Brock23-Dec-13 2:59 Gustav Brock 23-Dec-13 2:59
 Last Visit: 31-Dec-99 18:00     Last Update: 28-Jul-16 22:18 Refresh 1