Du kunne også lave det med en løkke og snask:
function sec2resttime(secs)
dim txt, rest, arrDiv, arrText, i
sTime = ""
arrDiv = array(60,60,24,0)
arrText = array("sekund", "minut", "time", "dag")
arrTextFlertal = array("er", "ter", "r", "e")
rest = secs
for i = 0 to ubound(arrDiv)
if rest > 0 or i = 0 then
if arrDiv(i) > 0 then
val = rest mod arrDiv(i)
rest = fix(rest / arrDiv(i))
else
val = rest
rest = 0
end if
if val > 0 or (val = 0 and i = 0 and rest = 0) then
endelse = ""
if val <> 1 then
endelse = arrTextFlertal(i)
end if
if len(txt) > 0 then
if instr(txt, " og ") = 0 then
separator = " og "
else
separator = ", "
end if
else
separator = ""
end if
txt = val & " " & arrText(i) & endelse & separator & txt
end if
end if
next
sec2resttime = txt
end function
Jeg har flg. tests til at synliggøre forventningerne til output:
arrSecs2 = array( _
0, "0 sekunder", _
1, "1 sekund", _
11, "11 sekunder", _
31, "31 sekunder", _
60, "1 minut", _
124, "2 minutter og 4 sekunder", _
1500, "25 minutter", _
3600, "1 time", _
10000, "2 timer, 46 minutter og 40 sekunder", _
86400, "1 dag", _
100000, "1 dag, 3 timer, 46 minutter og 40 sekunder", _
200000, "2 dage, 7 timer, 33 minutter og 20 sekunder" _
)
txt = ""
for i = 0 to ubound(arrSecs2) step 2
secs = arrSecs2(i)
expected = arrSecs2(i+1)
actual = sec2resttime(secs)
txt = txt & secs & " -> " & actual & " => "
if expected = actual then
txt = txt & " OK" & vbCrLf
else
txt = txt & " Fejl: forventet <" & expected & ">" & vbCrLf
end if
next
response.write txt