Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如果语句地狱,如何检查传递的日期是否与3天内的日期匹配,但仅当该日期与其他条件不匹配时_Asp.net Mvc_Date_If Statement_.net 3.5_C# 3.0 - Fatal编程技术网

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";
}