Count number of Mondays in a given date range

后端 未结 15 1241
南旧
南旧 2020-11-28 09:35

Given a date range, I need to know how many Mondays (or Tuesdays, Wednesdays, etc) are in that range.

I am currently working in C#.

15条回答
  •  渐次进展
    2020-11-28 09:55

    This will return a collection of integers showing how many times each day of the week occurs within a date range

        int[] CountDays(DateTime firstDate, DateTime lastDate)
        {
            var totalDays = lastDate.Date.Subtract(firstDate.Date).TotalDays + 1;
            var weeks = (int)Math.Floor(totalDays / 7);
    
            var result = Enumerable.Repeat(weeks, 7).ToArray();
            if (totalDays % 7 != 0)
            {
                int firstDayOfWeek = (int)firstDate.DayOfWeek;
                int lastDayOfWeek = (int)lastDate.DayOfWeek;
                if (lastDayOfWeek < firstDayOfWeek)
                    lastDayOfWeek += 7;
                for (int dayOfWeek = firstDayOfWeek; dayOfWeek <= lastDayOfWeek; dayOfWeek++)
                    result[dayOfWeek % 7]++;
            }
            return result;
        }
    

    Or a slight variation which lets you do FirstDate.TotalDaysOfWeeks(SecondDate) and returns a Dictionary

        public static Dictionary TotalDaysOfWeeks(this DateTime firstDate, DateTime lastDate)
        {
            var totalDays = lastDate.Date.Subtract(firstDate.Date).TotalDays + 1;
            var weeks = (int)Math.Floor(totalDays / 7);
    
            var resultArray = Enumerable.Repeat(weeks, 7).ToArray();
            if (totalDays % 7 != 0)
            {
                int firstDayOfWeek = (int)firstDate.DayOfWeek;
                int lastDayOfWeek = (int)lastDate.DayOfWeek;
                if (lastDayOfWeek < firstDayOfWeek)
                    lastDayOfWeek += 7;
                for (int dayOfWeek = firstDayOfWeek; dayOfWeek <= lastDayOfWeek; dayOfWeek++)
                    resultArray[dayOfWeek % 7]++;
            }
            var result = new Dictionary();
            for (int dayOfWeek = 0; dayOfWeek < 7; dayOfWeek++)
                result[(DayOfWeek)dayOfWeek] = resultArray[dayOfWeek];
            return result;
        }
    

提交回复
热议问题