Question

I am wondering if i can get the date of every alternate friday starting with 13th of April, 2012 to give it as a parameter to a stored procedure using c#, asp.net?

It should also be most recently passed date. Thank you!

Was it helpful?

Solution

Just set a DateTime with the date you want to start at, and then keep adding 14 days:

So to get every other Friday after 4/13 until the end of the year:

DateTime dt = new DateTime(2012, 04, 13);
while (dt.Year == 2012)
{
    Console.WriteLine(dt.ToString());
    dt = dt.AddDays(14);
}

More info after comment:

If you want the most recent alternate Friday since 2012/04/13, you can compute the number of days between now and 2012/04/13, take the remainder of that divided by 14, and subtract that many days from today's date:

DateTime baseDate = new DateTime(2012, 04, 13);
DateTime today = DateTime.Today;

int days = (int)(today - baseDate).TotalDays;
int rem = days % 14;
DateTime mostRecentAlternateFriday = today.AddDays(-rem);

OTHER TIPS

You can easily make a generator method that would give you the set of fridays:

public IEnumerable<DateTime> GetAlternatingFridaysStartingFrom(DateTime startDate)
{
    DateTime tempDate = new DateTime(startDate.year, startDate.Month, startDate.Day);

    if(tempDate.DayOfWeek != DayOfWeek.Friday)
    {
        // Math may be off, do some testing
        tempDate = tempDate.AddDays((7 - ((int)DayOfWeek.Friday - (int)tempDate.DayOfWeek) % 7);
    }

    while(true)
    {                
        yield return tempDate;
        tempDate = tempDate.AddDays(14);
    }
}

Then, simply use some LINQ to determine how much you want:

var numberOfFridays = GetAlternatingFridaysStartingFrom(DateTime.Today).Take(10);

Why do you need a stored proc?

If you have a date that is Friday, why not just use AddDays(14) in a loop?

If you want to find the nearest Friday from a start date, just use this:

while(date.DayOfWeek != DayOfWeek.Friday)
{
    date.AddDays(1);
}

Then use the 14 day loop to get every other Friday.

You can create simple method that will enumerate them like so:

public static IEnumerable<DateTime> GetAlternatingWeekDay(DateTime startingDate)
{
    for (int i = 1; ; i++)
    {
        yield return startingDate.AddDays(14*i);
    }
}

Which you can call like this:

DateTime startingDate = DateTime.Parse("2012-04-13");
foreach (var date in GetAlternatingWeekDay(startingDate).Take(10))
{
    Console.WriteLine(date.ToString("R"));
}

Alternately, if you need to know the date for a given number of weeks out, you could use code like this:

DateTime date = DateTime.Parse("2012-04-13").AddDays(7 * numberOfWeeks);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top