0

我正在尝试渲染一个显示两个日期之间的一些记录的视图,当没有传递参数时,视图必须显示从第 5 天开始到下个月的下一个第 5 天的一个月的记录。

现在我做到了,但我担心我的代码,有没有另一种方法可以做到这一点,我的意思是让我的代码看起来更好。

var dateStart = new DateTime();
var dateEnd = new DateTime();

if(dateTime !=null)
{  
     dateStart = Convert.ToDateTime(dateTime);
     dateEnd = new DateTime(dateStart.Year, dateStart.Month + 1, 5);
}
else
{
     if (DateTime.Today.Day <= 4)
     {
          DateTime lastMonth = DateTime.Today.AddMonths(-1);
          dateStart = new DateTime(lastMonth.Year, lastMonth.Month, 5);
          dateEnd = new DateTime(dateStart.Year, dateStart.Month + 1, 5);
     }

     DateTime date = DateTime.Today;
     dateStart = new DateTime(date.Year, date.Month, 5);
     dateEnd = new DateTime(date.Year, date.Month + 1,5);
}
4

2 回答 2

1

DateTime您不应该添加这样的月份,因为当它尝试创建一个月份为 13 的 DateTime 时,您最终会在 12 月无效,所以我会改用该AddMonths方法。您似乎还需要另一个else statement添加,以便第二个if statement不是无关紧要的。我已经稍微简化了代码,这是你的意思吗?

var dateStart = new DateTime();
var dateEnd = new DateTime();

if(dateTime !=null)
{  
     dateStart = Convert.ToDateTime(dateTime);
     dateEnd = new DateTime(dateStart.Year, dateStart.Month, 5).AddMonths(1);
}
else
{
     if (DateTime.Today.Day <= 4)
     {
          dateStart = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 5).AddMonths(-1);
          dateEnd = dateStart.AddMonths(1);
     }
     else
     { 
          dateStart = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 5);
          dateEnd = dateStart .AddMonths(1);
     }
}
于 2012-10-12T17:55:14.027 回答
1

这将在 12 月引发异常:

dateEnd = new DateTime(dateStart.Year, dateStart.Month + 1, 5);

你可以试试:

DateTime dateEnd = dateStart.AddMonths(1);
dateEnd = new DateTime(dateEnd.Year, dateEnd.Month, 5);
于 2012-10-12T17:57:36.783 回答