Jeeten Parmar
Jeeten Parmar

Reputation: 5757

Get Dates based on Current Date and List of Week Days

I have something odd requirement. I have Current Date and List of Week Days. And I want next all possible date till the target date.

For i.e. Today, its 22-04-2014 And Tuesday. Target date is 15-05-2014

I have 2 week days, Monday and Thursday. So code should find near by Week Day, which will be Thursday here. So It should return date of Thursday which is 24-04-2014. Now, next turn is of Monday which comes from List. So now, It should return date of Monday which is 28-04-2014.

It should keep repeating till the target date.

So, final result will be

24-04-2014,
28-04-2014,
1-05-2014,
5-05-2014,
8-05-2014,
12-05-2014

Please help me to get this type of result. Here, Monday and Thursday is not fixed. It can be any Day and any number of Day.

Upvotes: 1

Views: 842

Answers (2)

AbdulRahman Ansari
AbdulRahman Ansari

Reputation: 3057

Update : Link to the working example - Example

You can try this code, i have tested it and working correctly

private List<DateTime> ProcessDate(DateTime dtStartDate, DateTime targetDate)
        {
            DateTime dtLoop = dtStartDate;
            //dtRequiredDates to hold required dates
            List<DateTime> dtRequiredDates = new List<DateTime>();
            for (int i = dtStartDate.DayOfYear; i < targetDate.DayOfYear; i++)
            {
                if (dtLoop.DayOfWeek == DayOfWeek.Monday || dtLoop.DayOfWeek == DayOfWeek.Thursday)
                {
                    dtRequiredDates.Add(dtLoop);
                }
                dtLoop = dtLoop.AddDays(1);
            }
            return dtRequiredDates;
        }

You may have to enhance this codes so that it doesn't throw any exception based on the requirement.

UPDATE 2: You can have another method which will accept the days of week as follows

private List<DateTime> ProcessDate(DateTime dtStartDate, DateTime targetDate, List<DayOfWeek> daysOfWeek)
        {
            DateTime dtLoop = dtStartDate;
            List<DateTime> dtRequiredDates = new List<DateTime>();
            for (int i = dtStartDate.DayOfYear; i < targetDate.DayOfYear; i++)
            {
                foreach (DayOfWeek day in daysOfWeek)
                {
                    if (dtLoop.DayOfWeek == day)
                    {
                        dtRequiredDates.Add(dtLoop);
                    }
                }
                dtLoop = dtLoop.AddDays(1);
            }
            return dtRequiredDates;
        }

Here is the Example

Hence you can pass any number of week days as you wish.

Hope this helps

Upvotes: 2

dif
dif

Reputation: 2493

You could try something like this:

List<DayOfWeek> listOfDays = new List<DayOfWeek>{DayOfWeek.Monday, DayOfWeek.Thursday};
var end = new DateTime(2014,05,15);
var day = DateTime.Now.Date;
while (day < end)
{
    day.AddDays(1); // adds +1 days to "day"
    if (listOfDays.Contains(day.DayOfWeek)) Console.WriteLine(day.Date.ToString());
}

(I can't test the code right now, so maybe you need to modify a little ;-)

Upvotes: 0

Related Questions