每周在两个日期之间获取星期一的日期

SAE*_*EDI 0 c# datetime timestamp

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

例如

  • 开始日期 : 28-12-2018
  • 结束日期 : 29-12-2019

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

Monday     : 3-12-2018
Monday     : 14-01-2019
Monday     : 28-01-2019
Monday     : 11-02-2019
Run Code Online (Sandbox Code Playgroud)

这是我的代码:我无法从 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;
}
Run Code Online (Sandbox Code Playgroud)

Eyl*_*ylM 6

这是一个解决方案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;
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

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);
        }       
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

    {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}
Run Code Online (Sandbox Code Playgroud)

  • @Zong我已经更新了使用代码。 (2认同)