Vbscript 使用Date()比较2017年的日期会导致错误

Vbscript 使用Date()比较2017年的日期会导致错误,vbscript,asp-classic,Vbscript,Asp Classic,从用户处获得2个日期,它可以工作,除了:如果两个日期都在2017年,则错误消息会在显然不应该的时候显示 我手动将2016年更改为2017年,以查看是否有所不同,但没有(使用替换) 以下是验证代码: todays_date = Date() todays_date = Replace(todays_date, "/", "-") If m_date_01 < todays_date Or m_date_02 < todays_date Then m_valid = Fal

从用户处获得2个日期,它可以工作,除了:如果两个日期都在2017年,则错误消息会在显然不应该的时候显示

我手动将2016年更改为2017年,以查看是否有所不同,但没有(使用
替换

以下是验证代码:

todays_date = Date()
todays_date = Replace(todays_date, "/", "-")

If m_date_01 < todays_date Or m_date_02 < todays_date Then
    m_valid   = False
    m_message = m_message & "<li>dates cannot be in the past</li>"
End If

response.write(todays_date)
response.write(m_date_01)
response.write(m_date_02)
todays\u date=date()
todays\u date=替换(todays\u date,“/”,“-”)
如果m_date_01<今天的日期或m_date_02<今天的日期,则
m_valid=False
m_message=m_message&“日期不能在过去”
如果结束
回复。写(今天)
答复.书面答复(m_日期\u 01)
答复.书面答复(m_日期_02)
不要使用
来比较日期。有时它会起作用,但通常不会。更糟糕的是,它看起来像是在工作,从某种意义上说,它没有给出错误,但结果是错误的。在您的例子中,您几乎肯定会得到错误的结果,因为您所谓的日期实际上是字符串,而字符串比较的工作方式与日期比较完全不同。(例如,如果将“9-15-2016”、“1-15-2017”和“12-15-2016”作为字符串排序,则将得到1月、12月和9月。)

相反,请使用
IsDate()
确保您实际使用的是有效的日期1,然后使用
DateDiff(“d”,date1,date2)
确定哪个日期更晚。如果
date1
大于
date2
,则结果将小于0。(您可以使用您想要的任何时间间隔,但是对于“天数”来说,
“d”
可能是最有用的。)

1如果您使用的是用户输入,这一点尤其重要:即使我们忽略了恶意意图的问题,人们对如何编写日期也有非常有趣的想法。

不要使用
来比较日期。有时它会起作用,但通常不会。更糟糕的是,它看起来像是在工作,从某种意义上说,它没有给出错误,但结果是错误的。在您的例子中,您几乎肯定会得到错误的结果,因为您所谓的日期实际上是字符串,而字符串比较的工作方式与日期比较完全不同。(例如,如果将“9-15-2016”、“1-15-2017”和“12-15-2016”作为字符串排序,则将得到1月、12月和9月。)

相反,请使用
IsDate()
确保您实际使用的是有效的日期1,然后使用
DateDiff(“d”,date1,date2)
确定哪个日期更晚。如果
date1
大于
date2
,则结果将小于0。(您可以使用您想要的任何时间间隔,但是对于“天数”来说,
“d”
可能是最有用的。)


1如果您使用的是用户输入,这一点尤其重要:即使我们忽略了恶意意图的问题,人们对如何编写日期也有有趣的想法。

为什么将其标记为VBScript和ASP.NET?是VB.NET吗?它是经典的ASP吗?它是ASP,我正在处理.ASP文件?是不是贴错标签了?我假设asp的默认脚本语言是vb脚本?替换将使todays_date成为字符串,我怀疑m_date也是字符串。看看为什么你应该使用日期变量来处理日期。为了能够直接比较日期字符串,您需要使用与
date
数据(子)类型具有相同排序顺序的格式,例如ISO日期格式
yyyy-mm-dd
yyyyymmdd
。否则,您必须在比较之前将字符串转换为
Date
值。@VanquishedWombat我们怀疑它们可能是字符串值。由于这是ASP,用户提供的值来自某个文本字段的可能性非常高。但我同意OP需要提供更多关于其输入数据的信息。为什么将其标记为VBScript和ASP.NET?是VB.NET吗?它是经典的ASP吗?它是ASP,我正在处理.ASP文件?是不是贴错标签了?我假设asp的默认脚本语言是vb脚本?替换将使todays_date成为字符串,我怀疑m_date也是字符串。看看为什么你应该使用日期变量来处理日期。为了能够直接比较日期字符串,您需要使用与
date
数据(子)类型具有相同排序顺序的格式,例如ISO日期格式
yyyy-mm-dd
yyyyymmdd
。否则,您必须在比较之前将字符串转换为
Date
值。@VanquishedWombat我们怀疑它们可能是字符串值。由于这是ASP,用户提供的值来自某个文本字段的可能性非常高。但我同意OP需要提供更多关于其输入数据的信息。