Update a Date to a specific month
在我的MVC应用程序中,我的用户说他们一年做两次笔试。三月和九月。但是,如果一个用户没有通过测试,那么他们将在90天内重新测试(不必是3月或9月)。
例如,如果一个用户在
1 2 3 4 5 6 7 8 | DateTime usersTestDate = new DateTime(2016, 3, 2); // user fails usersTestDate = usersTestDate.AddDays(90); // usersTestDate is now 5/31/2016 // now the user retakes the test and passes // usersTestDate should now be in September of 2016. |
我如何才能做到这一点,因为如果用户失败,那么userstestdate本质上可以是书中的任何日期。基本上,如果用户在3月或9月以外的任何月份通过了考试重考。我怎样才能让他们的新约会在3月或9月?
我创造了一个网络小提琴
感谢您的帮助。
更新
如果他们失败了一次又失败了,那么他们每90天就要重新夺回一次。如果他们在九月份之后继续不及格,他们就跳过九月份,如果他们通过了,就再去三月份。
要简化逻辑,请考虑以下内容。
当有人通过测试时,我们不需要关心最后一个测试日期;我们可以根据当前日期为下一个可用的测试安排时间。下面的代码表示您只能在前一个月预订该测试
如果失败,则在最后一次测试日期后增加90天。
1 2 3 4 5 6 7 8 9 10 11 12 13 | public DateTime NextTestDate(DateTime testDate, bool passed) { if (passed) { var now = DateTime.Now; if (DateTime.Now.Month < 3) return new DateTime(now.Year, 3, 2); if (DateTime.Now.Month < 9) return new DateTime(now.Year, 9, 2); return new DateTime(now.Year + 1, 3, 2); } return testDate.AddDays(90); } |
1 2 3 4 5 6 |
您没有指定3月和9月的日期应该是哪个月的哪一天,所以我随意选择了第一个。
我想这能抓住你想要的。我将下一个测试日期设置为9月/3月的最后一天,尽管您可以根据自己的需求轻松地更改它。
1 2 3 4 5 6 7 8 9 10 11 12 | public DateTime GetNextTestDate(DateTime testDate, bool passed) { if (passed) { if (testDate.Month >= 3 && testDate.Month < 9) return new DateTime(testDate.Year, 9, 30); else return new DateTime(testDate.Year + (testDate.Month >= 9 && testDate.Month <= 12 ? 1 : 0), 3, 31); // (add a year if we're 9-12) } else return testDate.AddDays(90); } |