Take the 2-minute tour ×

This question already has an answer here:

I've been trying many ways to calculate the round number of days between two dates, I mean, counting the whole days. An example of what I need:

   START DATE            END DATE          Day Count  

24/02/2010 16:26     24/02/2010 16:26         1  
20/02/2010 18:16     24/02/2010 16:26         5  
31/12/2009 20:00     24/02/2010 16:26         56  
15/07/2009 20:59     24/02/2010 16:26         225  
share|improve this question
You have yet to accept an answer. You haven't posted what you've tried. Do we have a third strike? –  Yuriy Faktorovich Feb 24 '10 at 23:00
add comment

marked as duplicate by Travis J, jball, Hanlet Escaño, Alex Ford, Intrications Jun 26 '13 at 0:24


3 Answers

up vote 21 down vote accepted

DateTime's can be subtracted to get a TimeSpan. The TimeSpan has a TotalDays which is the number of days (includes fractional days as well).

int DaysBetween(DateTime d1, DateTime d2) {
    TimeSpan span = d2.Subtract(d1);
    return (int)span.TotalDays;

NOTE Time spans are signed. If d1=1/9/11 and d2=1/11/11, then d1.subtract(d2)=timespan of -2 days. So if you want to use a time span to find out if dates are within X days of each other, you need to take the absolute value of the total days...

share|improve this answer
My solution in VB.NET: Dim ts As TimeSpan ts = s.Subtract(DateTime.Parse(h)) Dim days As Integer days = ts.TotalDays + 1 –  benoror Feb 24 '10 at 23:09
add comment

You can use the subtraction operator on the two instances of DateTime (or DateTimeOffset, as it has the same subtraction operator, and it is the recommended structure to use for date values in .NET) to get a TimeSpan instance.

Once you have that, you can call the Days property to get the number of whole days that the TimeSpan represents.

If you want the number of whole and fractional days, then look at the TotalDays property.

In your specific case, it seems that you want to add 1 to whatever value the Days property returns, as your custom calculation indicates that for two DateTime instances that represent the same value, the result is 1.

share|improve this answer
add comment
DateTime dtOne;
DateTime dtTwo;

// to get the total days in between
int answer = (dtTwo - dtOne).TotalDays
share|improve this answer
TimeSpan.TotalDays returns a double, so you'll need a conversion to int in there. –  ChrisF Feb 24 '10 at 23:04
add comment
