日期范围Visual Basic脚本无法按预期工作? [重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我按以下顺序传递变量:FileEndDate StartDateRange EndDateRange

FileEndDate = 10/11/2019
StartDateRange = 01/04/2019
EndDateRange = 30/04/2019

但是,我的代码返回'True',尽管10/11/2019不应该在01/04/2019 - > 30/04/2019的日期范围内。

If (WScript.Arguments.Item(0) >= WScript.Arguments.Item(1)) And (WScript.Arguments.Item(0) <= WScript.Arguments.Item(2)) Then
   WScript.Stdout.Writeline "True"
Else    
   WScript.Stdout.Writeline "False"
End If
date vbscript date-range
2个回答
0
投票

你正在比较字符串,"10/11/2019" > "01/04/2019""10/11/2019" < "30/04/2019"

您可能希望使用日期,或重写字符串以确保简单的字符串比较可用(YYYY / MM / DD)

后者可以这样做:

dim FileEndDate : FileEndDate = "10/11/2019"
dim StartDateRange : StartDateRange = "01/04/2019"
dim EndDateRange : EndDateRange = "30/04/2019"

function ReformatDate(sInputDate)
    dim aResult
    aResult = Split(sInputDate, "/")
    ReformatDate = aResult(2) & "/" & aResult(1) & "/" & aResult(0)
end function

FileEndDate = ReformatDate(FileEndDate)
StartDateRange = ReformatDate(StartDateRange)
EndDateRange = ReformatDate(EndDateRange)

If (FileEndDate >= StartDateRange) And (FileEndDate <= EndDateRange) Then
   MsgBox "True"
Else    
   MsgBox "False"
End If

这输出"False"


请注意,这不会检查字符串的初始格式。您可能需要编写自己的检查功能以确保它不会崩溃。


-2
投票

您正在比较字符串而不是日期。

让我们试试这个:将日期字符串转换为日期类型,然后比较它们:

Dim myDateFormat As String = "dd/MM/yyyy"
Dim date0 As Date = Date.ParseExact(WScript.Arguments.Item(0).ToString(), myDateFormat, System.Globalization.CultureInfo.InvariantCulture)
Dim date1 As Date = Date.ParseExact(WScript.Arguments.Item(1).ToString(), myDateFormat, System.Globalization.CultureInfo.InvariantCulture)
Dim date2 As Date = Date.ParseExact(WScript.Arguments.Item(2).ToString(), myDateFormat, System.Globalization.CultureInfo.InvariantCulture)

If (date0 >= date1) And (date0 <= date2) Then
   WScript.Stdout.Writeline "True"
Else    
   WScript.Stdout.Writeline "False"
End If

此外,使用这可以帮助避免后来的错误:

Option Strict On
Option Explicit On

玩得开心!

© www.soinside.com 2019 - 2024. All rights reserved.