问题描述
如果在命令框中运行以下功能,则在应返回[U]时将返回[D]。因为1964年4月31日不是一个有效日期。这是因为1964年是a年吗?这是错误吗?
?类型('DATE(Val(Substr([19640430],1,4)),Val(Substr([19640430],5,2)),Val(Substr([19640430],7,2))+ 1)' )
关于此的任何信息将非常有帮助。
谢谢 杰夫
解决方法
这是因为,即使它为空,Date数据类型也将返回D。在您的情况下,它返回空,因为Date(1964,4,31)不是有效的日期。我不知道它是否可以记录,在Date()函数中,检查第二个参数是否在1-12范围内,并且检查第三个参数在1-31中。就是这样,除此之外,不存在的日期不会导致错误,而只是返回一个空日期,但仍然是DATE。
您可以尝试:
? Date(2000,2,29)
? Date(2001,29)
* or even
? Date(2020,31)
最后两个不会出错,但返回空的“ DATE”。
如果要对日期的有效性进行类型检查,那么最好检查一下是否为空。
,Procedure VDATE
Lparameters v1,v2,v3
v1 = Str(v1,4,0)
v2 = str2(v2)
If Len(v2) < 2
v2 = [0] + v2
Endif
v3 = str2(v3)
If Len(v3) < 2
v3 = [0] + v3
Endif
Do Case
Case Empty(Ctod(v2 + [/] + v3 + [/] + v1))
Return .F.
Case Ctod(v2 + [/] + v3 + [/] + v1) > Date()
Return .F.
Case Ctod(v2 + [/] + v3 + [/] + v1) < Ctod([01/01/1000])
Return .F.
Otherwise
Return .T.
Endcase