在接下来的5周的每个星期一完成任务

时间:2019-01-21 16:58:44

标签: c#

如果用户只想完成几个任务,例如每个星期一从08到11,接下来的x周,我如何获得累积的开始时间和结束时间。

所以我怎么能以一种聪明的方式做到这一点。

我有MoreAdd,它告诉我们应该提前几周这样做。

当我只创建一个任务时。然后看起来像这样。

var sTimer = model.StartTime;
var eTimer = model.EndTime;

SignUpInfo addSignUpInfo = new SignUpInfo
                    {
                        CompanyId = companyId,
                        Title = model.Title,
                        Info = model.Info,
                        StartTime = sTimer,
                        EndTimer = eTimer,
                        Closed = false,
                        Pay = PayValue,
                        TaskDone = false,
                        CreateTime = DateTime.Now,
                        CategoriId = model.SelectedKategori
                    };

                    _db.SignUpInfo.Add(addSignUpInfo);
                    _db.SaveChanges();

但是我只会写5写,然后从下一个星期一开始写一个,再向前写5遍,怎么办?

1 个答案:

答案 0 :(得分:2)

,您正在努力确定从下周一开始的下五个星期的开始DateTimes和结束static IEnumerable<(DateTime start, DateTime end)> GetTimes(DateTime startTime, DateTime endTime, DayOfWeek startDay, int countWeeks) { if(endTime < startTime) throw new ArgumentException("TODO"); TimeSpan diff = endTime - startTime; int daysUntilWeekDay = ((int) startDay - (int) startTime.DayOfWeek + 7) % 7; DateTime beginningDate = startTime.AddDays(daysUntilWeekDay); for (int i = 0; i <= countWeeks; i++) { DateTime date = beginningDate.AddDays(7 * i); yield return (start: date, end:date.Add(diff)); } } 。您可以使用此方法:

DateTime dt = new DateTime(2019, 01, 20, 8, 0, 0); //yesterday, sunday, 8 o clock in the morning
foreach(var x in GetTimes(dt, dt.AddHours(3), DayOfWeek.Monday, 5))
    Console.WriteLine("Start:{0} End:{1}", x.start, x.end);

示例:

xdebug.remote_autostart=0 

通过这种方法,很容易建立一个使用现有代码保存任务的循环。