Task

Write a function or program which:

   takes a positive integer representing a duration in seconds as input (e.g., 100), and
   returns a string which shows the same duration decomposed into:
   weeks,
   days, 
   hours, 
   minutes,   and 
   seconds.
This is detailed below (e.g., "2 hr, 59 sec").



Demonstrate that it passes the following three test-cases:

Test Cases


 input number

 output string


 7259

 2 hr, 59 sec


 86400

 1 d


 6000000

 9 wk, 6 d, 10 hr, 40 min

Details
The following five units should be used:



 unit

 suffix used in output

 conversion


 week

 wk

 1 week = 7 days


 day

 d

 1 day = 24 hours


 hour

 hr

 1 hour = 60 minutes


 minute

 min

 1 minute = 60 seconds


 second

 sec



However, only include quantities with non-zero values in the output (e.g., return "1 d" and not "0 wk, 1 d, 0 hr, 0 min, 0 sec").

Give larger units precedence over smaller ones as much as possible (e.g., return 2 min, 10 sec and not 1 min, 70 sec or 130 sec)

Mimic the formatting shown in the test-cases (quantities sorted from largest unit to smallest and separated by comma+space; value and unit of each quantity separated by space).




 
[start]
input "Enter SECONDS: "; seconds
seconds=int(abs(seconds))
if seconds=0 then print "Program complete.": end
UnitsFound=0: LastFound$=""
years=int(seconds/31449600): seconds=seconds mod 31449600
if years then LastFound$="years"
weeks=int(seconds/604800): seconds=seconds mod 604800
if weeks then LastFound$="weeks"
days=int(seconds/86400): seconds=seconds mod 86400
if days then LastFound$="days"
hours=int(seconds/3600): seconds=seconds mod 3600
if hours then LastFound$="hours"
minutes=int(seconds/60): seconds=seconds mod 60
if minutes then LastFound$="minutes"
if seconds then LastFound$="seconds"
select case years
    case 0
    case 1: print years; " year";
    case else: print years; " years";
end select
select case weeks
    case 0
    case 1  
        if years then
            if LastFound$="weeks" then print " and "; else print ", ";
        end if
        print weeks; " week";
    case else
        if years then
            if LastFound$="weeks" then print " and "; else print ", ";
        end if
        print weeks; " weeks";
end select
select case days
    case 0
    case 1  
        if years or weeks then
            if LastFound$="days" then print " and "; else print ", ";
        end if
        print days; " day";
    case else
        if years or weeks then
            if LastFound$="days" then print " and "; else print ", ";
        end if
        print days; " days";
end select
select case hours
    case 0
    case 1  
        if years or weeks or days then
            if LastFound$="hours" then print " and "; else print ", ";
        end if
        print hours; " hour";
    case else
        if years or weeks or days then
            if LastFound$="hours" then print " and "; else print ", ";
        end if
        print hours; " hours";
end select
select case minutes
    case 0
    case 1  
        if years or weeks or days or hours then
            if LastFound$="minutes" then print " and "; else print ", ";
        end if
        print minutes; " minute";
    case else
        if years or weeks or days or hours then
            if LastFound$="minutes" then print " and "; else print ", ";
        end if
        print minutes; " minutes";
end select
select case seconds
    case 0
    case 1  
        if years or weeks or days or hours or minutes then
            if LastFound$="seconds" then print " and "; else print ", ";
        end if
        print seconds; " second";
    case else
        if years or weeks or days or hours or minutes then
            if LastFound$="seconds" then print " and "; else print ", ";
        end if
        print seconds; " seconds";
end select
print
goto [start]
 