Convert seconds to compound duration: Difference between revisions

Content added Content deleted
mNo edit summary
No edit summary
Line 545: Line 545:
86400 sec is 1 d
86400 sec is 1 d
6000000 sec is 9 wk, 6 d, 10 hr, 40 min
6000000 sec is 9 wk, 6 d, 10 hr, 40 min
</pre>


=={{header|D}}==
<lang d>
import std.stdio, std.conv, std.algorithm;

immutable uint SECSPERWEEK = 604_800;
immutable uint SECSPERDAY = 86_400;
immutable uint SECSPERHOUR = 3_600;
immutable uint SECSPERMIN = 60;

string ConvertSeconds(in uint seconds)
{
uint rem = seconds;

uint weeks = rem / SECSPERWEEK;
rem %= SECSPERWEEK;
uint days = rem / SECSPERDAY;
rem %= SECSPERDAY;
uint hours = rem / SECSPERHOUR;
rem %= SECSPERHOUR;
uint mins = rem / SECSPERMIN;
rem %= SECSPERMIN;

string formatted = "";

(weeks != 0) ? formatted ~= (weeks.to!string ~ " wk, ") : formatted;
(days != 0) ? formatted ~= (days.to!string ~ " d, ") : formatted;
(hours != 0) ? formatted ~= (hours.to!string ~ " hr, ") : formatted;
(mins != 0) ? formatted ~= (mins.to!string ~ " min, ") : formatted;
(rem != 0) ? formatted ~= (rem.to!string ~ " sec") : formatted;

if (formatted.endsWith(", ")) return formatted[0..$-2];

return formatted;
}

void main()
{
7_259.ConvertSeconds.writeln;
86_400.ConvertSeconds.writeln;
6_000_000.ConvertSeconds.writeln;
}
</lang>
{{out}}
<pre>
2 hr, 59 sec
1 d
9 wk, 6 d, 10 hr, 40 min
</pre>
</pre>