I'm looking to count the number of dates covered (inclusive) between two DateTimes
.
This is not .TotalDays
as periods less than 24 hours may still return "2" by overlapping two different days. Likewise, two dates minutes apart should still return "1".
For example:
2012-2-1 14:00 to 2012-2-2 23:00 -> 2 (1st and 2nd Feb)
2012-2-1 14:00 to 2012-2-2 10:00 -> 2 (1st and 2nd Feb)
2012-2-1 23:00 to 2012-2-2 00:00 -> 2 (1st and 2nd Feb)
2012-2-1 23:00 to 2012-2-3 00:00 -> 3 (1st, 2nd, 3rd Feb)
2012-2-1 14:00 to 2012-2-1 15:00 -> 1 (1st Feb)
2012-2-1 14:00 to 2012-2-1 14:00 -> 1 (1st Feb)
2012-1-1 00:00 to 2012-12-31 23:59 -> 366 (All of 2012)
I can get this functionality with the code below:
DateTime dt1 = new DateTime(2000,1,2,12,00,00);
DateTime dt2 = new DateTime(2000,1,3,03,00,00);
int count = 0;
for (DateTime date = dt1; date.Date <= dt2.Date; date = date.AddDays(1))
count++;
return count;
Is there a better way?
Why not just:
int count = dt1.Date.Subtract(dt2.Date).Duration().Days + 1;
Using .Date
normalizes the Date to midnight (0:00), add 1 to the Days
to get the number of different dates, not just the number of days in between.
Using Duration
makes sure you always get a positive answer.