Перезаписывающие переменные Cassic ASP SetLocale - PullRequest
0 голосов
/ 06 ноября 2018

Я испытываю это очень странное поведение в Классическом ASP (VBScript).

У меня есть следующая функция, которая преобразует строку ввода даты в определенный формат, в зависимости от установленного в настоящее время localeid. 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 , даже если она активно не изменяет ее. Таким образом, я получаю разные результаты для каждого звонка.

Можно ли как-нибудь предотвратить это?

Спасибо.

...