Asp.net mvc 如果语句地狱,如何检查传递的日期是否与3天内的日期匹配,但仅当该日期与其他条件不匹配时
正如这个乱七八糟的问题所说,我基本上是在寻找一种更整洁的方法来完成下面的代码片段。 (用于日历中的可用性匹配)Asp.net mvc 如果语句地狱,如何检查传递的日期是否与3天内的日期匹配,但仅当该日期与其他条件不匹配时,asp.net-mvc,date,if-statement,.net-3.5,c#-3.0,Asp.net Mvc,Date,If Statement,.net 3.5,C# 3.0,正如这个乱七八糟的问题所说,我基本上是在寻找一种更整洁的方法来完成下面的代码片段。 (用于日历中的可用性匹配) if(date.Year==now.Year&&date.Month==now.Month&&day==now.day) { daysHtml.Append(“+day.ToString()+”); } else if(((day==SelectedDate.day) ||(day!=SelectedDate.day&((day==SelectedDate.AddDays(1.day)
if(date.Year==now.Year&&date.Month==now.Month&&day==now.day)
{
daysHtml.Append(“+day.ToString()+”);
}
else if(((day==SelectedDate.day)
||(day!=SelectedDate.day&((day==SelectedDate.AddDays(1.day);(SelectedDate.day>3&&day==SelectedDate.AddDays(-1.day))&(day!=SelectedDate.AddDays(2.day)&&day!=SelectedDate.AddDays(3.day);(SelectedDate.day>3&&day!=SelectedDate.addDay(-3.addDay);(3.addDay);)
||(day!=SelectedDate.day&((day==SelectedDate.AddDays(2.day);(SelectedDate.day>3&&day==SelectedDate.AddDays(-2.day))&(day!=SelectedDate.AddDays(3.day);| day!=SelectedDate.AddDays(1.day);(SelectedDate.day>3&&day!=SelectedDate.addDay(-1.day))
||(day!=SelectedDate.day&((day==SelectedDate.AddDays(3.day);(SelectedDate.day>3&&day==SelectedDate.AddDays(-3.day))&(day!&(SelectedDate.addDay>3&&day!=SelectedDate.AddDays(-2.day)| day!=SelectedDate.addDay(1.day);(SelectedDate.day>3&&day);(selectedDay);)
&&((双精度)endprice>0)和&(SelectedDate.Month==date.Month))
{}
你的耳朵和眼睛现在会流血;)
只是想澄清一下。。。
SelectedDate是传递到日历的日期。一天就是一个月中的一天。(而循环日您可以先缩短,如果:
if (date.Date == now.Date)
我认为您可以改进语句的第二部分(较长的部分)。通过创建两个单独的日期对象,一个是选定日期后的3天,另一个是未来的3天,您可以查看您的日期是否介于这两个点之间 例如(在伪代码中):
if day>earlierDay&&day
将其与其他if条件相结合,应该与上面的条件相同(假设我理解了您的逻辑!)
更新:
有了更多的信息,我想你可以做一些非常类似的事情,但是看看整个date对象,而不仅仅是day。我承认我不熟悉用于日期比较的.net语法,但是如果还没有,那么我会编写一个简短的帮助器方法来比较两个日期,看看其中一个是否在另一个之前也要考虑几个月。这也意味着你的if语句可以保持简洁。不需要任何聪明的东西,只需要一个基本的日期比较,先检查年份,然后检查月份,然后检查日期。第二个语句中还有一些usless逻辑 所有3个分支都有
(day != SelectedDate.Day ...
这是千真万确的,因为你已经设法通过了elseif的开头
else if(((day==SelectedDate.day)
这是重新格式化的else块
{
DateTime SelectedDate = DateTime.Now.AddDays(-3);
float endprice = 14;
int nextDay = SelectedDate.AddDays(1).Day;
int prevDay = SelectedDate.AddDays(-1).Day;
int dayAfterNext = SelectedDate.AddDays(2).Day;
int dayBeforeYesterday = SelectedDate.AddDays(-2).Day;
int dayThreeDaysAgo = SelectedDate.AddDays(-3).Day;
if (((day == SelectedDate.Day)
||
(
((day == nextDay ||
(SelectedDate.Day > 3 && day == prevDay)) &&
(day != dayAfterNext ||
(SelectedDate.Day > 3 && day != dayBeforeYesterday) ||
day != SelectedDate.AddDays(3).Day
|| (SelectedDate.Day > 3 && day != dayThreeDaysAgo))))
||
(
((day == dayAfterNext ||
(SelectedDate.Day > 3 && day == dayBeforeYesterday)) &&
(day != SelectedDate.AddDays(3).Day ||
(SelectedDate.Day > 3 && day != dayThreeDaysAgo) ||
day != nextDay ||
(SelectedDate.Day > 3 && day != prevDay)))) ||
(
((day == SelectedDate.AddDays(3).Day ||
(SelectedDate.Day > 3 && day == dayThreeDaysAgo)) &&
(day != dayAfterNext ||
(SelectedDate.Day > 3 && day != dayBeforeYesterday) ||
day != nextDay ||
(SelectedDate.Day > 3 && day != prevDay)))))
&& (endprice > 0) && (SelectedDate.Month == date.Month))
{
}
}
var selectedDate=DateTime.Now.Date.AddDays(-23);
var today=DateTime.Now.Date.AddDays(-22);
var check=newhashset();
foreach(可枚举范围(-3,7))中的var i
if(selectedDate.AddDays(i).ToString(“yyyyMM”)==today.ToString(“yyyyMM”))
勾选.Add(选择日期.AddDays(i).Day);
如果(selectedDate==今天)
{
//今天
}
else if(选中.Contains(选择的日期))
{
//3天内”;
}
这令人遗憾吗?您是否可以通过书面形式而不是通过代码来澄清逻辑?我认为您正在尝试查看日期是否为今天,如果不是,则是否在选定日期的三天内。是否正确?日期变量是什么?日期。日期==天?您在我澄清时键入了问题:o)基本上,我是在传递一个日期(比如说2010年11月27日,它被选为Day)我需要测试它。SelectedDay是当前日历日添加到字符串中的日期吗?如果不是,那么如果我在所选日期中添加一天,它是否匹配,如果不匹配,则两天,再次是三天。我需要比较整个日期,而不仅仅是几天,否则我必须处理没有添加3天的测试到月底或月初休息3天。我作弊了,问题的答案是:o)
if (date.Date == now.Date)
if day > earlierDay && day < laterDay then
{
//day falls within 3 days of selected day
}
(day != SelectedDate.Day ...
{
DateTime SelectedDate = DateTime.Now.AddDays(-3);
float endprice = 14;
int nextDay = SelectedDate.AddDays(1).Day;
int prevDay = SelectedDate.AddDays(-1).Day;
int dayAfterNext = SelectedDate.AddDays(2).Day;
int dayBeforeYesterday = SelectedDate.AddDays(-2).Day;
int dayThreeDaysAgo = SelectedDate.AddDays(-3).Day;
if (((day == SelectedDate.Day)
||
(
((day == nextDay ||
(SelectedDate.Day > 3 && day == prevDay)) &&
(day != dayAfterNext ||
(SelectedDate.Day > 3 && day != dayBeforeYesterday) ||
day != SelectedDate.AddDays(3).Day
|| (SelectedDate.Day > 3 && day != dayThreeDaysAgo))))
||
(
((day == dayAfterNext ||
(SelectedDate.Day > 3 && day == dayBeforeYesterday)) &&
(day != SelectedDate.AddDays(3).Day ||
(SelectedDate.Day > 3 && day != dayThreeDaysAgo) ||
day != nextDay ||
(SelectedDate.Day > 3 && day != prevDay)))) ||
(
((day == SelectedDate.AddDays(3).Day ||
(SelectedDate.Day > 3 && day == dayThreeDaysAgo)) &&
(day != dayAfterNext ||
(SelectedDate.Day > 3 && day != dayBeforeYesterday) ||
day != nextDay ||
(SelectedDate.Day > 3 && day != prevDay)))))
&& (endprice > 0) && (SelectedDate.Month == date.Month))
{
}
}
var selectedDate = DateTime.Now.Date.AddDays(-23);
var today = DateTime.Now.Date.AddDays(-22);
var check = new HashSet<int>();
foreach (var i in Enumerable.Range(-3,7))
if (selectedDate.AddDays(i).ToString("yyyyMM") == today.ToString("yyyyMM"))
check.Add(selectedDate.AddDays(i).Day);
if (selectedDate == today)
{
// today
}
else if (check.Contains(selectedDate.Day))
{
// within 3 days";
}