如何检查两个日期是否介于c#或Vb.net中的另外两个日期之间

时间:2012-08-08 04:00:17

标签: c# .net vb.net

我有一个搜索页面,可以按日期搜索文章。搜索条件仅适用于月份和年份。 因此,每当选择月份并单击“过滤器” 我把那个月的开始日当作“dtStartDate” 和“dtEndDate”这个月的结束日

必须搜索的文章也有 有效开始日期为“EffStartDate” 和生效结束日期为“EffEndDate”

那么,如果这些“EffStartDate”和“EffEndDate”都落入其中的条件应该是什么 “dtStartDate”和“dtEndDate”?

我尝试了这个,但结果不正确,

If (EffStartDate >= dtStartDate & EffStartDate  <= dtEndDate) 

    //Do Something     

ElseIf (EffEndDate >= ddl_FromDate & EffEndDate <= dtEndDate.AddDays(1)) Then

    //Do Something

End If

场景:     让我们假设有两篇文章将使用不同的日期进行搜索。

Article - 1
EffStartDate = 11/7/2012
EffEndDate = 31/8/2012

Article - 2
EffStartDate = 1/7/2012 
EffEndDate = 28/9/2012 

现在,在我的搜索页面中,当我在2012年7月1日至2012年7月31日之间搜索文章时     我应该看到这两篇文章的结果,因为它们既有效又有效     落在用于搜索的日期之间。     但是现在我只看到了Artilce - 1。为什么?

4 个答案:

答案 0 :(得分:2)

从您的示例中我很清楚,您的标准文本是错误的。标准文本指出,如果有效开始日期和结束日期都在日期范围内,您只想显示文章...如果 整个有效范围该文章完全符合的搜索。但是您的示例表明,如果日期范围的任何部分符合搜索范围,则您希望显示该文章。编辑以澄清这将有所帮助,但是现在我将向前推进,假设该示例是正确的解释。

您似乎也在混合使用VB.Net和C#中的语言语法。你不能只混合这样的语法。你的代码片段中最强大的影响似乎是VB.Net,所以我将在我的例子中使用它。

在VB.Net中,您可以编写一个与搜索示例匹配的条件,如下所示:

If       (EffStartDate >= dtStartDate AndAlso EffStartDate  < dtEndDate.AddDays(1)) _
  OrElse (EffEndDate >= dtStartDate AndAlso EffEndDate < dtEndDate.AddDays(1)) 
  OrElse (EffStartDate < dtEndDate.AddDays(1) AndAlso EffEndDate >= dtStartDate) Then
   '...
End If

我还担心你在If块中编写这段代码。如果这些日期在数据库中,那么数据库到目前为止是过滤结果的最佳位置。如果数据在其他地方,则某种类型的linq-to-objects查询可能会产生更好的性能,并且更短,更容易维护。

答案 1 :(得分:0)

我没有很好地回答你的问题,但像这样更简单

 bool isStartEffDateInside=(EffStartDate >= dtStartDate && EffStartDate  <= dtEndDate);
 bool isEndEffDateInside=(EffEndDate >= ddl_FromDate && EffEndDate <= dtEndDate.AddDays(1));

if(isStartEffDateInside || isEndEffDateInside)
{
 // do something global
  if(isStartEffDateInside && isEndEffDateInside)
    {
        //Do something when the two Effs are inside the StartEnd
    }
}

希望这会有所帮助

答案 2 :(得分:0)

您是否尝试过DateTime.CompareTo方法?

答案 3 :(得分:0)

C#版本:

if ((EffStartDate >= dtStartDate && EffStartDate <= dtEndDate) ||
    (EffEndDate >=  dtStartDate && EffEndDate <= dtEndDate))
{
    // Good Article
}
else
{
    // Bad Article
}