views:

447

answers:

2

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

+1  A: 
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"
Binary Worrier
+1  A: 

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
AnthonyWJones