Convert seconds to compound duration: Difference between revisions
Convert seconds to compound duration (view source)
Revision as of 10:03, 26 February 2020
, 4 years ago→{{header|AppleScript}}: Moved later post to below the previous one and added text.
(→{{header|AppleScript}}: Moved later post to below the previous one and added text.) |
|||
Line 291:
=={{header|AppleScript}}==
<lang applescript>on secondsToCompoundDuration(s)▼
if ((s's class is not integer) or (s < 0)) then▼
error "secondsToCompoundDuration() handler only accepts positive integers."▼
else if (s = 0) then▼
-- The task description notwithstanding, return "0 sec" if the input is the positive integer 0.▼
set output to "0 sec"▼
else▼
-- Otherwise perform the described task.▼
set suffixes to {" wk", " d", " hr", " min", " sec"}▼
-- AppleScript has constants for the number of seconds in a week, a day, an hour, and a minute.▼
set durationConstants to {weeks, days, hours, minutes, 1}▼
-- Initialise a list to collect the output.▼
set output to {}▼
-- Work through the list of constants.▼
repeat with i from 1 to 5▼
-- Get the next constant and divide the number of seconds by it to get the number of corresponding units. ▼
set thisConstant to item i of durationConstants▼
set unitValue to s div thisConstant▼
-- If the number of units isn't zero, coerce it to text, concatenate the corresponding suffix, and add the result to the output list.▼
if (unitValue > 0) then set end of output to (unitValue as text) & item i of suffixes▼
-- Get the number of seconds left over for use in the next iteration of the repeat.▼
set s to s mod thisConstant▼
-- Short-cut out of the repeat if no seconds remaining, although this isn't strictly necessary.▼
if (s = 0) then exit repeat▼
end repeat▼
-- Coerce the list of collected results to a single text using ", " as a delimiter.▼
set astid to AppleScript's text item delimiters▼
set AppleScript's text item delimiters to ", "▼
set output to output as text▼
set AppleScript's text item delimiters to astid▼
end if▼
return output▼
end secondsToCompoundDuration▼
return secondsToCompoundDuration(7259) & linefeed & ¬▼
secondsToCompoundDuration(86400) & linefeed & ¬▼
secondsToCompoundDuration(6000000)</lang>▼
{{output}}▼
<pre>"2 hr, 59 sec▼
1 d▼
9 wk, 6 d, 10 hr, 40 min"</pre>▼
----▼
<lang AppleScript>-- LOCAL NAMES FOR COMPOUND DURATIONS ----------------------------------------
Line 478 ⟶ 430:
86400 -> 1 d
6000000 -> 9 wk, 6 d, 10 hr, 40 min</pre>
▲----
A more straightforward solution:
▲<lang applescript>on secondsToCompoundDuration(s)
▲ if ((s's class is not integer) or (s < 0)) then
▲ error "secondsToCompoundDuration() handler only accepts positive integers."
▲ else if (s = 0) then
▲ -- The task description notwithstanding, return "0 sec" if the input is the positive integer 0.
▲ set output to "0 sec"
▲ else
▲ -- Otherwise perform the described task.
▲ set suffixes to {" wk", " d", " hr", " min", " sec"}
▲ -- AppleScript has constants for the number of seconds in a week, a day, an hour, and a minute.
▲ set durationConstants to {weeks, days, hours, minutes, 1}
▲ -- Initialise a list to collect the output.
▲ set output to {}
▲ -- Work through the list of constants.
▲ repeat with i from 1 to 5
▲ -- Get the next constant and divide the number of seconds by it to get the number of corresponding units.
▲ set thisConstant to item i of durationConstants
▲ set unitValue to s div thisConstant
▲ -- If the number of units isn't zero, coerce it to text, concatenate the corresponding suffix, and add the result to the output list.
▲ if (unitValue > 0) then set end of output to (unitValue as text) & item i of suffixes
▲ -- Get the number of seconds left over for use in the next iteration of the repeat.
▲ set s to s mod thisConstant
▲ -- Short-cut out of the repeat if no seconds remaining, although this isn't strictly necessary.
▲ if (s = 0) then exit repeat
▲ end repeat
▲ -- Coerce the list of collected results to a single text using ", " as a delimiter.
▲ set astid to AppleScript's text item delimiters
▲ set AppleScript's text item delimiters to ", "
▲ set output to output as text
▲ set AppleScript's text item delimiters to astid
▲ end if
▲ return output
▲end secondsToCompoundDuration
▲return secondsToCompoundDuration(7259) & linefeed & ¬
▲ secondsToCompoundDuration(86400) & linefeed & ¬
▲ secondsToCompoundDuration(6000000)</lang>
▲{{output}}
▲<pre>"2 hr, 59 sec
▲1 d
▲9 wk, 6 d, 10 hr, 40 min"</pre>
=={{header|Applesoft BASIC}}==
|