Cassic ASP SetLocale覆盖变量

时间:2018-11-06 16:10:28

标签: vbscript scope asp-classic setlocale

我在Classic ASP(VBScript)中遇到了这种非常奇怪的行为。

我具有以下功能,该功能可将日期输入字符串转换为特定格式,具体取决于当前设置的语言环境。 DAYSTART和DAYEND应该始终将给定日期转换为美国时间格式的字符串,因为它主要用于数据库查询。

Function Date(DateInput,DateFormat)
    LocaleIDOrig = GetLocale

    '-> set locale id
    Select Case LocaleID
       Case "1031"  : SetLocale(1031)
       Case Else    : SetLocale(1033)
    End Select

    '-> database date conversions
    Select Case DateFormat
       Case "DAYSTART","DAYEND","FIRSTOFMONTH","ENDOFMONTH" 
           DateInput = month(DateInput) &"/"& day(DateInput) &"/"& year(DateInput) &" "& hour(DateInput) &":"& minute(DateInput) &":"& second(DateInput)

           '-> set locale
           SetLocale(1033)
    End Select

    Select case DateFormat
        Case "DAYSTART"     : GetDate = formatdatetime(DateInput,2) &" 00:00:00 AM"
        Case "DAYEND"       : GetDate = formatdatetime(DateInput,2) &" 11:59:59 PM"
        Case Else           : GetDate = DateInput
    End Select
End Function

假设我从请求字符串中收到一个有效日期,该日期为: 2018-11-10 。 LocaleID和GetLocale为 1031 。我这样格式化

DateString = request("eventdate")
response.write "DateString: " & DateString& "<br>"

DateStart = Date(DateString,"DAYSTART")
response.write "DateString: " & DateString& "<br>"

DateEnd = Date(DateString,"DAYEND") 
response.write "DateString: " & DateString& "<br>"

当我这样称呼时,输出为:

DateString: 2018-11-10 00:00:00
DateString: 11/10/2018 0:0:0
DateString: 10/11/2018 0:0:0

DateString Date 函数覆盖,即使它没有主动更改它。这样,每次调用我都会得到不同的结果。

有什么办法可以防止这种情况发生吗?

谢谢。

0 个答案:

没有答案