Reputation: 9738
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
Reputation: 98
you can use TimeSpan
class
timespan p = new timespan();
p = dt2-dt1;
MessageBox.Show(p.days.tostring());
Upvotes: 0
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);
}
Upvotes: 6
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
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