none
Retrive Dates between 2 dates RRS feed

  • Question

  • How can we retrive working dates (consider a have 5 working days) between 2 dates.

    we can input like  getdates(startdate,enddate,noofworkingdays) and the output become

    01/01/2006,02/01/2006 ,01/03/2006...... and so on . i have to do the same in c#.

    thanks

    alal

     

    Thursday, May 11, 2006 3:49 PM

All replies

  • The work week is relative to who you are and what culture you live in.  Instead a more useful function might be to retrieve the DateTime values between a given date range excluding those with a specific day of the week.

    public Collection<DateTime> GetFilteredDateRange ( DateTime start, DateTime end, DayOfWeek[] excludeWeekdays )
    {
       Collection<DateTime> range =
    new Collection<DateTime>();
       DateTime current = start;

      
    while (current <= end)
       {
         
    if (Array.IndexOf(excludeWeekdays, current.DayOfWeek) < 0)
             range.Add(current);

          /
    /Next day
         
    current = current.AddDays(1.0);
       };
      
    return range;
    }

    This function is concise but slow for large ranges.  A better approach (if needed) would be to start at the front of the date range and simply skip over the week days in blocks until you reach a Saturday.  Then skip 2 days and repeat again until you exceed the end range.  This however is assuming things that might not be true for your culture.

    Michael Taylor - 5/11/06

    Thursday, May 11, 2006 4:14 PM
    Moderator
  •  

    Hopefully I've understood your requirements and this piece of code will help.

    However, could you expand upon your noofworkingdays requirement please?

    private string GetWorkingDays(DateTime start, DateTime end)

    {

      string retStr = "";

      while (start != end)

      {

        if ((start.DayOfWeek != DayOfWeek.Sunday) && (start.DayOfWeek != DayOfWeek.Saturday))

        {

          retStr = retStr + start.ToShortDateString();

          if (retStr.Length > 1) retStr = retStr + ", ";

        }

        start = start.AddDays(1);

      }

      return retStr;

    }

    Use it like so:

    DateTime start = new DateTime(2006, 05, 01);

    DateTime end = new DateTime(2006, 05, 15);

    MessageBox.Show (GetWorkingDays(start, end));

    HTH

    Thursday, May 11, 2006 4:26 PM