2016-09-29 19 views
0

在我的MVC应用程序中,我的用户表示他们每年会在3月和9月进行两次书面测试。但是,如果用户未通过测试,则他们在90天内重新测试(不一定是3月或9月)。将日期更新到特定的月份

例如,如果用户需要他们的第一个测试3/2/2016,并且该用户通过,则该用户并不需要采取其他的测试,直到ANYDAY在九月。但如果该用户失败,那么该用户需要在5月31日重新进行测试。所以让我试着用一点代码来说明这一点。

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基本上可以是用户未能..基本上,如果用户通过考试的,除了三月或九月任月份重录书中的任何日期。我怎样才能让他们的新约会在三月或九月?

我创建了一个dotnetfiddle

任何帮助表示赞赏。

UPDATE

如果他们已经失败一次之后再次失败,那么他们夺回保持每90天。如果他们继续在3月份的测试中失败,那么他们会跳过9月,如果他们通过,就再次进入3月

+0

当他们第二次失败时会发生什么?他们再试一次吗?当他们在3月份的考试中失败时,会发生什么? – Jonesopolis

+0

@Jonesopolis对不起,我没有添加。如果他们在失败一次后再次失败,那么他们会每90天重复一次。如果他们在3月份的测试中失败,那么他们会跳过9月,如果他们通过 –

+0

,那么他们会再次跳到3月份听起来您对这些要求有一个体面的想法,您是否对如何将该英文翻译成代码感到困惑? – Jonesopolis

回答

1
if (userTestDate.Month < 3) 
    userTestDate = new DateTime(userTestDate.Year, 3, 1); 
else if (userTestDate.Month < 9) 
    userTestDate = new DateTime(userTestDate.Year, 9, 1); 
else 
    userTestDate = new DateTime(userTestDate.Year + 1, 3, 1); 

你不指定三月&九月日期应在一个月的一天,所以我已经任意选择第一。

+0

谢谢你的帮助!我绝对会让它比它需要的更难! –

1

我认为这会捕捉到您所追求的内容。我将下一次考试日期设置为9月/ 3月的最后一天,但您可以根据自己的要求轻松更改。

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); 
} 
+0

谢谢你的帮助!我绝对做到这一点比它所需要的更难! –

1

为了简化逻辑,请考虑以下几点。

当有人通过时,我们不需要关心最后的测试日期;我们可以根据当前日期安排他们进行下一个可用测试。下面的代码表示您只能在前一个月预订该测试

如果它们失败,则将90天添加到最后一次测试日期。

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); 
} 
+0

谢谢你的帮助!我绝对会让它比它需要的更难! –

相关问题