如何在c#或Vb.net中检查这两个日期是否介于另外两个日期之间
我有一个搜索页面,可以按日期搜索文章。搜索条件仅包含月份和年份。 因此,无论何时选择月份并单击“筛选” 我把那个月的开始日期定为“dtStartDate” 月底日期为“dtEndDate” 必须搜索的文章也有 生效开始日期为“生效开始日期” 且生效结束日期为“生效日期” 那么,如果“EffStartDate”和“EffEndDate”都在内部,那么情况应该是什么呢 “dtStartDate”和“dtEndDate” 我试过了,但结果不正确如何在c#或Vb.net中检查这两个日期是否介于另外两个日期之间,c#,.net,vb.net,C#,.net,Vb.net,我有一个搜索页面,可以按日期搜索文章。搜索条件仅包含月份和年份。 因此,无论何时选择月份并单击“筛选” 我把那个月的开始日期定为“dtStartDate” 月底日期为“dtEndDate” 必须搜索的文章也有 生效开始日期为“生效开始日期” 且生效结束日期为“生效日期” 那么,如果“EffStartDate”和“EffEndDate”都在内部,那么情况应该是什么呢 “dtStartDate”和“dtEndDate” 我试过了,但结果不正确 If (EffStartDate >= dtSta
If (EffStartDate >= dtStartDate & EffStartDate <= dtEndDate)
//Do Something
ElseIf (EffEndDate >= ddl_FromDate & EffEndDate <= dtEndDate.AddDays(1)) Then
//Do Something
End If
现在,在我的搜索页面中,当我在2012年7月1日至2012年7月31日之间搜索文章时
我应该看到这两篇文章,因为effstardate和effenddate都在某个地方
介于用于搜索的日期之间。
但现在我只看到Artilce-1作为结果。为什么?我不太明白你的问题,但像这样更简单
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
}
}
bool isStartEffDateInside=(EffStartDate>=dtStartDate&&EffStartDate=ddl_FromDate&&EffEndDate您尝试过这种方法吗?从您的示例中我很清楚,您的标准文本是错误的。您的标准文本声明,如果有效开始日期和结束日期都在日期范围内,您只想显示一篇文章……如果re文章的有效范围完全符合搜索范围。但您的示例表明,如果日期范围的任何部分符合搜索范围,则您希望显示文章。进行编辑以澄清这一点会有所帮助,但现在我将继续前进,假设示例是正确的解释
您似乎还将VB.Net和C#中的语言语法混合在一起。您不能这样混合语法。您的代码片段中影响最大的似乎是VB.Net,因此我将在我的示例中使用它
在VB.Net中,您可以编写与搜索示例匹配的条件,如下所示:
If(EffStartDate>=dtStartDate,也就是EffStartDate=dtStartDate,生效日期=dtStartDate),然后
'...
如果结束
我还担心您在If
块中编写此代码。如果这些日期在数据库中,那么数据库是迄今为止过滤结果的最佳位置。如果数据在其他地方,那么某种类型的linq to objects查询可能会产生更好的性能,并且更短,更易于维护。C\ve重复性:
if((EffStartDate>=dtStartDate&&EffStartDate=dtStartDate&&EffEndDate 1)如果您可以在数据库“select”中使用“between”子句,则执行该操作。2)否则,如果您必须在C代码中执行该操作(与SQL“select”相比),然后使用。您能详细说明为什么结果不正确吗?您得到的结果和期望的结果是什么?您是否使用linq to entities?@gideon请检查更新后的问题和场景。感谢在这两种情况下,您的有效结束日期都超出了搜索范围。根据您的条件文本,您希望排除这两种情况icles,不显示任何内容。你确定你的意思是开始日期或结束日期不在日期范围内吗?另外,我担心你是在If块中编写的。这应该是数据库查询的一部分,或者通过linq完成。这两种方法都会产生更好的性能,并且更好地进行代码维护。即使使用ur日志ic,结果不是预期的。请检查我现在添加的场景。感谢上面的场景…您的逻辑工作正常。它会将两篇文章作为结果显示给我。但是当我在2012年8月1日到2012年8月31日之间搜索这篇文章时,它也会将两篇文章作为结果显示给我!!!但现在不是了…它只显示了第1篇文章
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
}
}
if ((EffStartDate >= dtStartDate && EffStartDate <= dtEndDate) ||
(EffEndDate >= dtStartDate && EffEndDate <= dtEndDate))
{
// Good Article
}
else
{
// Bad Article
}