Vbscript DateDiff返回Null或vbNull,但无法在if语句中检查它
让我先回答一些问题:Vbscript DateDiff返回Null或vbNull,但无法在if语句中检查它,vbscript,asp-classic,Vbscript,Asp Classic,让我先回答一些问题: 是的,我必须维护一些遗留代码 是的,我意识到这是过时的,可怕的 是的,有时我收到的日期是空的 不,我不能换新的 我有以下代码: If DateDiff("y", Date(), someDate) > 0 Then 'Do something here End If 然而,我发现someDate可以NULL 我决定在收到空日期的实例中查找DateDiff将返回什么。妈妈对这件事很关心 因此,我决定自己做测试,看看是否能发现: Response.Write
- 是的,我必须维护一些遗留代码
- 是的,我意识到这是过时的,可怕的
- 是的,有时我收到的日期是空的
- 不,我不能换新的
If DateDiff("y", Date(), someDate) > 0 Then
'Do something here
End If
然而,我发现someDate可以NULL
我决定在收到空日期的实例中查找DateDiff将返回什么。妈妈对这件事很关心
因此,我决定自己做测试,看看是否能发现:
Response.Write TypeName(DateDiff("y", Date(), NULL))
这将输出Null
Response.Write VarType(DateDiff("y", Date(), NULL))
输出1
,该值等于vbNull
Response.Write VarType(DateDiff("y", Date(), NULL))
因此,我尝试了以下方法(我还尝试与vbNull
进行比较):
这将输出否
这是疯狂的部分
我试着颠倒对比:
If DateDiff("y", Date(), NULL) <> NULL Then
Response.Write "Yes"
Else
Response.Write "No"
End If
如果DateDiff(“y”,Date(),NULL)为空,则
回答。写“是”
其他的
回答:写“否”
如果结束
它仍然输出No
这是怎么回事?如何在if块中检查此报税表?我疯了吗?您正在寻找
IsNull()
函数。不能使用=
比较运算符与vbNull进行比较-必须使用函数进行检查。语句Null=Null
实际上等于false,这在某种程度上解释了你奇怪的测试结果。只要尝试如果IsNull(DateDiff(“y”,Date(),Null)),那么
我会在单独的条件下检查IsNull(someDate)
,因为您仍然有3种情况(日期为Null
,日期差大于0,日期差小于或等于0)这种方法避免了无意义的日期计算。这种行为的原因是Null
被定义为不等于任何其他值的值,包括其他Null
值。@AnsgarWiechers感谢您的澄清!你也是,波莉。我不知道这是关于VBScript的。更准确地说,Null[comparison operator]Null
的计算结果为“not true”。这本身并不是假的,但也不是真的。