UTC time stamp format - Split in parts a string containing the UTC time date (classic asp/vbscript)

后端 未结 2 672
无人共我
无人共我 2021-01-21 10:02

I believe that my question is misunderstood:

My string (uuttcc) contains a UTC time stamp format, created in other page with JAVASCRIPT.

相关标签:
2条回答
  • 2021-01-21 10:25

    Use Split() to get the parts of your input string. Feed the correct parts to DateSerial()/CDate() to get a Date that should display/print as /d/m/y if that's the way of your locale/Regional settings. If you don't need a Date, build the desired String via Join(). As in:

    Option Explicit
    
    Function mkDicMonth()
      Dim dicT :  Set dicT = CreateObject("Scripting.Dictionary")
      Dim i 
      For i = 1 To 12
          dicT(MonthName(i, True)) = i 
      Next
      Set mkDicMonth = dicT
    End Function
    
    Dim sInp   : sInp = "Wed, 10 Jan 2018 17:23:34 UTC"
    Dim dicM   : Set dicM = mkDicMonth()
    Dim aParts : aParts = Split(sInp)
    Dim sOtp   : sOtp = Join(Array(aParts(1), dicM(aParts(2)), aParts(3)), "/")
    WScript.Echo TypeName(sOtp), sOtp
    
    Dim dtOtp
    ' DateSerial
    dtOtp = DateSerial(CInt(aParts(3)), CInt(dicM(aParts(2))), CInt(aParts(1)))
    WScript.Echo 1, TypeName(dtOtp), dtOtp, "(german locale, dmy)"
    
    ' CDate (risky, order, locale dependent)
    dtOtp = CDate(sOtp)
    WScript.Echo 2, TypeName(dtOtp), dtOtp, "(german locale, dmy)"
    
    ' CDate (risky, monthname, locale dependent)
    dtOtp = CDate(Join(Array(aParts(1), aParts(2), aParts(3))))
    WScript.Echo 3, TypeName(dtOtp), dtOtp, "(german locale, dmy)"
    

    output:

    cscript 48193001.vbs
    String 10/1/2018
    1 Date 10.01.2018 (german locale, dmy)
    2 Date 10.01.2018 (german locale, dmy)
    3 Date 10.01.2018 (german locale, dmy)
    
    0 讨论(0)
  • 2021-01-21 10:27

    Wasn't going to answer but with all the fluff in the comments, use Split().

    Dim input: input = "Wed, 10 Jan 2018 17:23:34 UTC"
    Dim parsed: parsed = ParseDateString(input)
    Dim output: output = Year(parsed) & "/" & Right("00" & Month(parsed), 2) & "/" & Right("00" & Day(parsed), 2)
    Call Response.Write(output)
    
    Function ParseDateString(value)
        'Split the string into manageable chunks.
        Dim parts: parts = Split(value, Chr(32))
        Dim dt, tm
        'Check the split created an array we can work with.
        If IsArray(parts) Then
            'Ignore the first element and use elements 1 - 3 to 
            'create the date structure.
            dt = parts(1) & Chr(32) & parts(2) & Chr(32) & parts(3)
            'Use the 5th element for the time structure.
            tm = parts(4)
            'Stitch them together to form a date variable.
            dt = CDate(dt & Chr(32) & tm)
        Else
            'We don't have a valid format return an empty string.
            dt = Empty
        End If
        ParseDateString = dt
    End Function
    

    Output:

    2018/01/10
    

    What about not using Split()?

    The main issue is getting the string to be recognised by CDate() once you have this using inbuilt date functions will allow you to build whatever format you want.

    In fact the only thing that breaks that particular parse using CDate() is the Wed, and UTC, so you ignore them using a combination of Mid(), InStr() and Len() as in this compact example;

    Dim input: input = "Wed, 10 Jan 2018 17:23:34 UTC"
    Dim output: output = CDate(Mid(input, InStr(1, input, ",") + 1, ((Len(input) - 4) - InStr(1, input, ","))))
    'You now have a valid `Date` variable you can manipulate to your hearts
    'content.
    Call Response.Write(output)
    
    10/01/2018 17:23:34
    

    Useful Links

    • How to convert string to datetime format classic asp
    • Does VBScript have a DateTime.TryParse equivalent?
    • date format in VBS
    • Format current date and time
    0 讨论(0)
提交回复
热议问题