tags:

views:

150

answers:

3

I have a DateTime StartDate and EndDate.

How can I, irrespective of times, iterate across each Day between those two?

Example: StartDate is 7/20/2010 5:10:32 PM and EndDate is 7/29/2010 1:59:12 AM.

I want to be able to iterate across 7/20, 7/21, 7/22 .. 7/29.

Help?

+4  A: 
for(DateTime date = StartDate; date.Date <= EndDate.Date; date = date.AddDays(1))
{
    ...
}

The .Date is to make sure you have that last day, like in the example.

Yuriy Faktorovich
I think you want `date.Date <= EndDate.Date` so that you get the final day.
Dean Harding
This goes into an infinite loop, the AddDays method doesn't change date, but returns a new DateTime instance. Use date = date.AddDays(1) instead.
corvuscorax
@Dean: Thanks, saw your comment after change.
Yuriy Faktorovich
A: 
DateTime date = DateTime.Now;
DateTime endDate = date.AddDays(10);

while (date < endDate)
{
  Console.WriteLine(date);
  date = date.AddDays(1);
}
benPearce
A: 

You have to be careful about end-date. For example, in

"

Example: StartDate is 7/20/2010 5:10:32 PM and EndDate is 7/29/2010 1:59:12 AM. I want to be able to iterate across 7/20, 7/21, 7/22 .. 7/29.

"

date < endDate will not include 7/29 ever. When you add 1 day to 7/28 5:10 PM - it becomes 7/29 5:10 PM which is higher than 7/29 2 AM.

if that is not what you want then I'd say you do

for (DateTime date = start.Date; date <= end.Date; date += TimeSpan.FromDays(1))
{
     Console.WriteLine(date.ToString());
}

or something to that effect.

mho