Tuesday, May 3, 2011

Duration vbscript (vbs) function

Is there a function to convert a specified number of seconds into a week/day/hour/minute/second time format in vbscript?

eg: 969234 seconds = 1wk 4days 5hrs 13mins 54secs

From stackoverflow
  • Dim myDate
    dim noWeeks
    dim noDays
    dim tempWeeks
    dim pos 
    myDate = DateAdd("s",969234,CDate(0))
    
    tempWeeks = FormatNumber(myDate / 7,10)
    pos = instr(tempWeeks, ".")
    if pos > 1 then
        tempWeeks = left(myDate, pos -1)
    end if
    noWeeks = Cint(tempWeeks)
    
    noDays = Cint(((myDate / 7) - noWeeks) * 7)
    
    wscript.echo noWeeks & "wk " & noDays & "days " & datepart("h", myDate) & "hrs " & datepart("n", myDate) & "mins " & datepart("s", myDate) & "secs"
    
  • No built in function to do that.

    Here is a quick and dirty one:-

    Function SecondsToString(totalSeconds)
    
     Dim work : work = totalSeconds
    
     Dim seconds
     Dim minutes
     Dim hours
     Dim days
     Dim weeks
    
     seconds = work Mod 60
     work = work \ 60
     minutes = work Mod 60
     work = work \ 60
     hours = work Mod 24
     work = work \ 24
     days = work Mod 7
     work = work \ 7
     weeks = work
    
     Dim s: s = ""
     Dim renderStarted: renderStarted = False
    
     If (weeks <> 0) Then
      renderStarted = True
      s = s & CStr(weeks)
      If (weeks = 1) Then
       s = s & "wk "
      Else
       s = s & "wks "
      End If
     End If
    
     If (days <> 0 OR renderStarted) Then
      renderStarted = True
      s = s & CStr(days)
      If (days = 1) Then
       s = s & "day "
      Else
       s = s & "days "
      End If
     End If
    
     If (hours <> 0 OR renderStarted) Then
      renderStarted = True
      s = s & CStr(hours)
      If (hours = 1) Then
       s = s & "hr "
      Else
       s = s & "hrs "
      End If
     End If
    
     If (minutes <> 0 OR renderStarted) Then
      renderStarted = True
      s = s & CStr(minutes)
      If (minutes = 1) Then
       s = s & "min "
      Else
       s = s & "mins "
      End If
     End If
    
     s = s & CStr(seconds)
     If (seconds = 1) Then
      s = s & "sec "
     Else
      s = s & "secs "
     End If
    
     SecondsToString = s
    
    End Function
    

0 comments:

Post a Comment