# [Stax](https://github.com/tomtheisen/stax), 54 [bytes](https://github.com/tomtheisen/stax/blob/master/docs/packed.md#packed-stax) ▀♂♂┼╕Qá◙à*ä∙Φò►⌠╨Ns↔║►πîÇ∙cI≡ªb?δ♪9gΓ╕┬≥‼⌡Öå01:♪EoE╘≡ë [Run and debug it](https://staxlang.xyz/#p=df0b0bc5b851a00a852a84f9e89510f4d04e731dba10e38c80f96349f0a6623feb0d3967e2b8c2f213f5998630313a0d456f45d4f089&i=1%0A59%0A60%0A43200%0A86401%0A1815603%0A1426636800&a=1&m=2) Here's the unpacked, ungolfed, ascii representation of the same program. stack starts with total seconds c60/ push total minutes to stack c60/ ... hours c24/ ... days Yc7/ ... weeks y31/ ... months y365/ ... years L make a list out of all the calculated time units `)sQP(dr'pk,oV4?_HIFD?x`j compressed literal for singular forms of unit names \ zip totals with names rF foreach pair of total and name (in reverse orer) h!C skip if the current total is falsey (0) _J join the total and unit name with a space 's_1=T+ concat 's' unless the total is one Following execution, since there's no other output, the top of the stack is printed implicitly. [Run this one](https://staxlang.xyz/#c=+++++++++++++++++++++++++%09stack+starts+with+total+seconds%0Ac60%2F+++++++++++++++++++++%09push+total+minutes+to+stack%0Ac60%2F+++++++++++++++++++++%09...+hours+%0Ac24%2F+++++++++++++++++++++%09...+days%0AYc7%2F+++++++++++++++++++++%09...+weeks%0Ay31%2F+++++++++++++++++++++%09...+months%0Ay365%2F++++++++++++++++++++%09...+years%0AL++++++++++++++++++++++++%09make+a+list+out+of+all+the+calculated+time+units%0A%60%29sQP%28dr%27pk,oV4%3F_HIFD%3Fx%60j%09compressed+literal+for+singular+forms+of+unit+names%0A%5C++++++++++++++++++++++++%09zip+totals+with+names%0ArF+++++++++++++++++++++++%09foreach+pair+of+total+and+name+%28in+reverse+orer%29%0A++h%21C++++++++++++++++++++%09skip+if+the+current+total+is+falsey+%280%29%0A++_J+++++++++++++++++++++%09join+the+total+and+unit+name+with+a+space%0A++%27s_1%3DT%2B++++++++++++++++%09concat+%27s%27+unless+the+total+is+one&i=1%0A59%0A60%0A43200%0A86401%0A1815603%0A1426636800&a=1&m=2)