日期范围 Visual Basic 脚本未按预期工作?
Date Range Visual Basic Script Not Working as Expected?
我按以下顺序传递我的变量:
文件结束日期开始日期范围结束日期范围
FileEndDate = 10/11/2019
StartDateRange = 01/04/2019
EndDateRange = 30/04/2019
然而,我的代码 returns '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
您比较的是字符串而不是日期。
让我们试试这个:将您的日期字符串转换为日期类型,然后比较它们:
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
玩得开心!
您正在比较字符串,"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"
请注意,这不会检查字符串的初始格式。您可能需要编写自己的检查函数以确保它不会崩溃。
我按以下顺序传递我的变量: 文件结束日期开始日期范围结束日期范围
FileEndDate = 10/11/2019
StartDateRange = 01/04/2019
EndDateRange = 30/04/2019
然而,我的代码 returns '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
您比较的是字符串而不是日期。
让我们试试这个:将您的日期字符串转换为日期类型,然后比较它们:
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
玩得开心!
您正在比较字符串,"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"
请注意,这不会检查字符串的初始格式。您可能需要编写自己的检查函数以确保它不会崩溃。