Code:
;usage $duration2(x) same as $duration(x) but worded out as speced.
alias duration2 {
  var %duration = $replace($duration($1),$+(s,$chr(32)),$+(s,$chr(44),$chr(32)),sec,$+($chr(32),second),min,$+($chr(32),minute),hr,$+($chr(32),hour),day,$+($chr(32),day),wk,$+($chr(32),week))
  if ($numtok(%duration,32) > 2) { var %duration = $deltok(%duration,-3-,32) $gettok($gettok(%duration,-3,32),1,44) and $gettok(%duration,-2-,32) }
  return %duration
}


I compacted it a little smile

changes "s " to "s, " (last word wont get changed as no space)
changes "sec" to " second" same for "min" "hr" "day" "wk"
checks if i need the " and " and removes the , and adds the " and "

* I must admit i didnt check it against a large number of values, but it seemed to work ok.