VBScript ISO8601

В VBScript есть ли у FormatDateTime поддержка ISO 8601?

Если нет, то как бы я написал с ним такую ​​функцию?

Например:

Response.Write FormatAsISO8601(#05/04/2011#)

Function FormatAsISO8601(datetime)
    ...
End Function

person Alon Gubkin    schedule 01.08.2011    source источник


Ответы (4)


Вот конкретный код, который мне нужен из класса Криса, немного более оптимизированный:

Public Function ToIsoDateTime(datetime) 
    ToIsoDateTime = ToIsoDate(datetime) & "T" & ToIsoTime(datetime) & CurrentTimezone
End Function

Public Function ToIsoDate(datetime)
    ToIsoDate = CStr(Year(datetime)) & "-" & StrN2(Month(datetime)) & "-" & StrN2(Day(datetime))
End Function    

Public Function ToIsoTime(datetime) 
    ToIsoTime = StrN2(Hour(datetime)) & ":" & StrN2(Minute(datetime)) & ":" & StrN2(Second(datetime))
End Function

Private Function StrN2(n)
    If Len(CStr(n)) < 2 Then StrN2 = "0" & n Else StrN2 = n
End Function
person Alon Gubkin    schedule 01.08.2011
comment
StrN2(n) добрый или бессмысленный, так как его можно заменить на Right("0" & n, 2). - person user692942; 18.07.2021

Вот функция грубой силы:

sDate = iso8601Date(Now)
msgbox sDate

Function iso8601Date(dt)
    s = datepart("yyyy",dt)
    s = s & RIGHT("0" & datepart("m",dt),2)
    s = s & RIGHT("0" & datepart("d",dt),2)
    s = s & "T"
    s = s & RIGHT("0" & datepart("h",dt),2)
    s = s & RIGHT("0" & datepart("n",dt),2)
    s = s & RIGHT("0" & datepart("s",dt),2)
    iso8601Date = s
End Function
person rheitzman    schedule 26.08.2013

Насколько мне известно, не без загрузки какого-либо COM-компонента.

Вот написанный кем-то класс VBScript.

person Chris Haas    schedule 01.08.2011
comment
Ссылка уже не актуальна. - person Bohdan Kuts; 20.11.2018
comment
Вы просто используете встроенные функции даты/времени для форматирования даты и времени по своему усмотрению. - person user692942; 18.07.2021
comment
Привет @user692942, вопрос (десятилетней давности) заключался в том, поддерживает ли VBScript, в частности функция FormatDateTime, ISO-8601, которого в то время (и до сих пор, насколько мне известно) нет. Да, вы можете создать его вручную, используя секунды, минуты, часы и т. д., но это не встроено. По той же логике вы можете сказать: да, VBScripts поддерживает битторрент, просто используйте необработанный поток TCP/UDP и напишите свою собственную логику. . - person Chris Haas; 19.07.2021
comment
@ChrisHaas Я понимаю вашу точку зрения, но из-за двоичной поддержки VBScript вам придется использовать компонент COM для записи потока TCP / UDP, тогда как функции даты были там с момента его создания. - person user692942; 19.07.2021
comment
Вы правы, и они были там без поддержки ISO-8601! ;) В какой-то момент мы ссоримся, и я пытаюсь собрать воспоминания очень давно, например, эпохи 4 парней из Роллы! Но есть нативный или чистый VBScript, а есть то, что действительно использовали все. Чистый VBScript не мог даже общаться с базой данных или файловой системой, вы были вынуждены использовать COM, чтобы делать почти все, что имело последствия, за исключением локальных вспомогательных сценариев, которых я также написал много. О, хорошие воспоминания. Я не скучаю по нему, но это был первый язык, которым я когда-либо пользовался профессионально, так что есть некоторая ностальгия. - person Chris Haas; 19.07.2021

Некоторые исправления

Function iso8601Date(dt)
    s = datepart("yyyy",dt)
    s = s & "-" & RIGHT("0" & datepart("m",dt),2)
    s = s & "-" & RIGHT("0" & datepart("d",dt),2)
    s = s & "T"
    s = s & RIGHT("0" & datepart("h",dt),2)
    s = s & ":" & RIGHT("0" & datepart("n",dt),2)
    s = s & ":" & RIGHT("0" & datepart("s",dt),2)
    iso8601Date = s
End Function
person user2143508    schedule 18.05.2021
comment
Это не исправления, потому что ISO 8601 может быть выражен в расширенном или простом форматах без двусмысленности. - person user692942; 18.07.2021