ASP.NET MVC - 获取最新日期,即使它具有相同的日期

时间:2013-12-06 06:59:59

标签: c# asp.net-mvc date

以下代码显示最近日期的状态。它比较第一个日期是否是第二个日期,依此类推。但我有一个问题。如果第一个日期和第二个日期相同怎么办?

例如,第一个日期是2013-04-15(a_mm_date),第二个日期是2013-04-15(a_uat_date)。 a_mp_date为null所以没关系。所以它是这样的:a_mm_date - > a_mp_date - > a_uat_date。系统将显示状态为“FOR APPROVAL MM”。但是应该显示“IN PROCESS UAT”作为状态而不是FOR APPROVAL MM。

任何想法如何做到这一点?

//Get values if the status is A

if (data.s == "A")
{
    if (data.a_mm_date >= data.a_mp_date && data.a_mm_date >= data.a_uat_date)
    {
        data.s = "For Approval MM";
    }

    if (data.a_mp_date >= data.a_mm_date && data.a_mp_date >= data.a_uat_date)
    {
       data.s = "For Approval MP";
    }

    if (data.a_uat_date >= data.a_mp_date && data.a_uat_date >= data.a_mm_date)
    {
       data.s = "In Process UAT";
    }
}

2 个答案:

答案 0 :(得分:1)

我发现您的问题难以理解,但我怀疑最简单的方法就是使用else

if (...)
{
    data.s = "For approval MM";
}
else if (...)
{
    data.s = "For approval MP";
}
else if (...)
{
    data.s = "For approval UAT";
}
else
{
    // Whatever you want if none of the above is met
}

然后我将其提取到一个单独的方法中,这将阻止您需要重复data部分16次:

if (data.s == "A")
{
    data.s = ComputeNewApproval(data.a_mm_date, data.a_mp_date,
                                data.data.a_uat_date);
}

...

private static string ComputeNewApproval(DateTime mmDate, DateTime mpDate,
                                         DateTime uatDate)
{
    ...
}

(如果需要,请将它们DateTime?。)

然后我将属性的名称更改为更常规 - 如果s表示状态,则创建属性Status ...并理想地删除下划线,将MM,MP和UAT扩展为更有意义的名称。 (我猜UAT是用户验收测试,但我不知道MM和MP是什么。)

答案 1 :(得分:0)

最后一次if测试:

if (2013-04-15 >= null && 2013-04-15 >= 2013-04-15)...

所以它是true

您之前可以测试无效。最后一个if的示例:

if ((data.a_mp_date != null) && 
    (data.a_uat_date >= data.a_mp_date && data.a_uat_date >= data.a_mm_date))