Calculate the number of weekdays between two dates in C#

前端 未结 11 2232
温柔的废话
温柔的废话 2020-12-03 16:59

How can I get the number of weekdays between two given dates without just iterating through the dates between and counting the weekdays?

Seems fairly straightforward

11条回答
  •  遥遥无期
    2020-12-03 17:40

    Utility functions to get a range of dates:

    public IEnumerable GetDates(DateTime begin, int count)
    {
        var first = new DateTime(begin.Year, begin.Month, begin.Day);
        var maxYield = Math.Abs(count);
        for (int i = 0; i < maxYield; i++)
        {
            if(count < 0)
                yield return first - TimeSpan.FromDays(i);
            else
                yield return first + TimeSpan.FromDays(i);      
        }
        yield break;
    }
    
    public IEnumerable GetDates(DateTime begin, DateTime end)
    {
        var days = (int)Math.Ceiling((end - begin).TotalDays);
        return GetDates(begin, days);
    }
    

    LINQPad demo code:

    var begin = DateTime.Now;
    var end = begin + TimeSpan.FromDays(14);
    
    var dates = GetDates(begin, end);
    var weekdays = dates.Count(x => x.DayOfWeek != DayOfWeek.Saturday && x.DayOfWeek != DayOfWeek.Sunday);
    var mondays = dates.Count(x => x.DayOfWeek == DayOfWeek.Monday);
    var firstThursday = dates
        .OrderBy(d => d)
        .FirstOrDefault(d => d.DayOfWeek == DayOfWeek.Thursday);
    
    dates.Dump("Dates in Range");
    weekdays.Dump("Count of Weekdays");
    mondays.Dump("Count of Mondays");
    firstThursday.Dump("First Thursday");
    

提交回复
热议问题