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”。这本身并不是假的,但也不是真的。