elapsed
Definition: |
string res = elapsed(atom s, min_s=0, string fmt="")
-- or -- string res = elapsed_short(atom s, min_s=0, string fmt="") |
Description: | Convert a time in seconds to a human-readable string. |
pwa/p2js: | Supported. |
Comments: |
Technically this is not part of timedate but a standalone autoinclude (builtins\pelapsed.e)
s: a time in seconds to convert to a human-readable string. min_s: a value, if non-zero, below which "" should be returned. fmt: optional extra formatting for non-"" results, eg " (%s)" would add/also omit the brackets in the [non-zero-min_s] "" case. This is a trivial routine designed for general purpose use/approximations; for more precise timings, such as benchmark results, sprintf("%3.2fs",s) is probably more appropriate. A type check error occurs if s exceeds 100 billion years (probably fixable, but left as is to catch bad input). The short form returns a string in the format (([minus][N year[s], ][N week[s], ][N day[s], ]|[-])[N:[0]]N:[0]N|[-]Ns) For long form results, see Examples below. To explain that short form value more explicitly: if the result contains no ':', it is seconds (and has a trailing s), eg "3s" if the result contains one ':', it is minutes:seconds (':' at [-3]), eg "2:30" if the result contains two ':', it is hours:minutes:seconds (':' at [-6,-3]), eg "2:30:00" (if you want two and a half hours to appear as "2:30", chop 3 chars off the result!) if required, the result is prefixed with "y year[s]", "w week[s]", and "d day[s]", ie in longhand, see technicalia. Negative year, week, and day values are prefixed with "minus ", negative hours/mins/secs with (just the one) "-". Neither routine makes any attempt to express duration in months, decades, centuries, or millenia. |
Example: |
procedure ees(sequence tests) for i=1 to length(tests) do atom s = tests[i] printf(1,"%50s vs %s\n",{elapsed(s),elapsed_short(s)}) end for end procedure ees({12.34,120,1234,123456,120*60,60*60*24*364,60*60*24*364-1,60*60*24*365}) -- Output, comparing std vs short forms: -- 12.3s vs 12s -- 2 minutes vs 2:00 -- 20 minutes and 34s vs 20:34 -- 1 day, 10 hours, 17 minutes and 36s vs 1 day, 10:17:36 -- 2 hours vs 2:00:00 -- 52 weeks vs 52 weeks -- 51 weeks, 6 days, 23 hours, 59 minutes and 59s vs 51 weeks, 6 days, 23:59:59 -- 1 year vs 1 year |