首页 > 解决方案 > 在两个日期之间每周获取星期一的日期

问题描述

如何在给定的开始日期和结束日期之间的每周之后获取星期一日期

例如

所以以下日期应该在列表中

Monday     : 3-12-2018
Monday     : 14-01-2019
Monday     : 28-01-2019
Monday     : 11-02-2019

这是我的代码:我无法从 range.how 找到介于 1 周之间的每一周。

任何帮助都会被挪用

 DateTime startDate = LimitVmodel.StartDate;
 DateTime endDate = LimitVmodel.EndDate;

 TimeSpan diff = endDate - startDate;

 int days = diff.Days;

 for (long i = 0; i <= days; i++)
     // for (DateTime date = TIR.NetCore.PersianDateTime.ConvertShToM(LimitVmodel.StartDate); date <= TIR.NetCore.PersianDateTime.ConvertShToM(LimitVmodel.EndDate); date = date.AddDays((Double)Week))
 {
     DateTime date;
     date = startDate.AddDays(i);
     DateYear a = new DateYear();

     switch (LimitVmodel.Day)
     {
         case "Saturday":
              if (date.DayOfWeek == DayOfWeek.Saturday)
              {
                  allDates.Add(a);
              }
              break;

         case "Sunday":
              if (date.DayOfWeek == DayOfWeek.Sunday)
              {
                  allDates.Add(a);
              }
              break;

         case "Monday":
              if (date.DayOfWeek == DayOfWeek.Monday)
              {
                  allDates.Add(a);
              }
              break;
}

标签: c#datetimetimestamp

解决方案


这是一个解决方案Extension。获取DateTime范围和星期几。

返回日期时间列表。

public static class DateUtils
{
    public static List<DateTime> GetWeekdayInRange(this DateTime from, DateTime to, DayOfWeek day)
    {
        const int daysInWeek = 7;
        var result = new List<DateTime>();
        var daysToAdd = ((int)day - (int)from.DayOfWeek + daysInWeek) % daysInWeek;
        
        do
        {
            from = from.AddDays(daysToAdd);
            result.Add(from);
            daysToAdd = daysInWeek;
        } while (from < to);

        return result;
    }
}

用法:

namespace DatesTest
{
    class Program
    {        
        static void Main(string[] args)
        {
            var from = DateTime.Today; // 25/8/2019
            var to = DateTime.Today.AddDays(23); // 23/9/2019
            var allMondays = from.GetWeekdayInRange(to, DayOfWeek.Monday);
        }       
    }
}

输出:

    {8/26/2019 12:00:00 AM}
    {9/2/2019 12:00:00 AM}
    {9/9/2019 12:00:00 AM}
    {9/16/2019 12:00:00 AM}
    {9/23/2019 12:00:00 AM}

推荐阅读