Last active
May 15, 2019 11:55
-
-
Save seungjin/e59c17b4f7346db9fa2bfc92248b7cc0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule DurationFormatter do | |
def format_duration(0), do: "now" | |
def format_duration(s) do | |
year = div(s, 31536000) | |
day = div(s - year * 31536000, 86400) | |
hour = div(s - year * 31536000 - day * 86400,3600) | |
min = div(s - year * 31536000 - day * 86400 - hour * 3600,60) | |
sec = rem(s,60) | |
a = sec [ year, day, hour, min, sec ] | |
b = min [ year, day, hour, min, sec ] | |
c = hur [ year, day, hour, min, sec ] | |
d = day [ year, day, hour, min, sec] | |
e = yea [ year, day, hour, min, sec] | |
#e <> d <> c <> b <> a | |
f = [e,d,c,b,a] |> Enum.filter(fn x-> | |
x != "" | |
end) | |
[hd|tl] = Enum.reverse(f) | |
cond do | |
tl == [] -> hd | |
true -> ( Enum.reverse(tl) |> Enum.join(", ") ) <> " and " <> hd | |
end | |
end | |
defp sec([_,_,_,_,s]) when s == 0, do: "" | |
defp sec([_,_,_,_,s]) when s == 1, do: "1 second" | |
defp sec([_,_,_,_,s]) when s > 1, do: "#{s} seconds" | |
defp min([_,_,_,m,_]) when m == 0, do: "" | |
defp min([_,_,_,m,_]) when m == 1, do: "1 minute" | |
defp min([_,_,_,m,_]) when m > 1, do: "#{m} minutes" | |
defp hur([_,_,h,_,_]) when h == 0, do: "" | |
defp hur([_,_,h,_,_]) when h == 1, do: "1 hour" | |
defp hur([_,_,h,_,_]) when h > 1, do: "#{h} hours" | |
defp day([_,d,_,_,_]) when d == 0, do: "" | |
defp day([_,d,_,_,_]) when d == 1, do: "1 day" | |
defp day([_,d,_,_,_]) when d > 1, do: "#{d} days" | |
defp yea([y,_,_,_,_]) when y == 0, do: "" | |
defp yea([y,_,_,_,_]) when y == 1, do: "1 year" | |
defp yea([y,_,_,_,_]) when y > 1, do: "#{y} years" | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment