如果用户只想完成几个任务,例如每个星期一从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遍,怎么办?
答案 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
通过这种方法,很容易建立一个使用现有代码保存任务的循环。