Anup
Anup

Reputation: 9738

C# - Get days between 2 dates

My case scenario is User selects a financial year say 1-Jan-2015 to 31-Dec-2015. Then he selects days say 'SATURDAY','SUNDAY'.

I want to fetch all the dates between the above criteria.

I can get the dates like this :-

    ....
    for (var date = fromDate; date <= toDate; date = date.AddDays(1))
         temp.Add(date);        

But How to get only days 'SATURDAY', 'SUNDAY' from the date range?

Upvotes: 3

Views: 1679

Answers (4)

Ali
Ali

Reputation: 98

you can use TimeSpan class

timespan p = new timespan();
p = dt2-dt1;
MessageBox.Show(p.days.tostring());

Upvotes: 0

Eric
Eric

Reputation: 5733

var fromDate = new DateTime(2015, 1, 1);
var toDate = new DateTime(2015, 2, 15);
var dates = Enumerable.Range(0, (int)(toDate - fromDate).TotalDays + 1)
    .Select(i => fromDate.AddDays(i))
    .Where(i => i.DayOfWeek == DayOfWeek.Saturday || i.DayOfWeek == DayOfWeek.Sunday);


foreach(var date in dates)
{
    Console.WriteLine("{0:yyyy-MM-dd ddd}", date);
}

.Net fiddle

Upvotes: 6

Gustav
Gustav

Reputation: 55806

The loop is simple and does the job, but Linq is more fun.

But @Eric: Why the flag thing? You can select the weekdays directly:

DateTime fromDate = new DateTime(2015, 1, 1);
DateTime toDate = new DateTime(2015, 2, 15);
DateTime[] dates = Enumerable.Range(0, (int)toDate.Subtract(fromDate).TotalDays + 1)
    .Select(i => fromDate.AddDays(i))
    .Where(i => (i.DayOfWeek == DayOfWeek.Monday || i.DayOfWeek == DayOfWeek.Sunday)).ToArray();


foreach(DateTime date in dates)
{
    Console.WriteLine("{0:yyyy-MM-dd ddd}", date);
}

Upvotes: 0

Backs
Backs

Reputation: 24903

Use DayOfWeek property:

 for (var date = fromDate; date <= toDate; date = date.AddDays(1))
 {
     if (date.DayOfWeek == DayOfWeek.Sunday || date.DayOfWeek == DayOfWeek.Saturday) 
            temp.Add(date);
 }

In case if set of days of week is not static:

HashSet<DayOfWeek> daysOfWeek = new HashSet<DayOfWeek> { DayOfWeek.Saturday, DayOfWeek.Sunday };
List<DateTime> temp = new List<DateTime>();
for (var date = fromDate.Date; date <= toDate; date = date.AddDays(1))
    if (daysOfWeek.Contains(date.DayOfWeek))
        temp.Add(date);

Upvotes: 8

Related Questions