Packages
forge_sdk
1.1.3
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.7
1.0.6
1.0.4
1.0.4-p1
1.0.4-p0
1.0.3
1.0.2
1.0.2-p1
1.0.1
1.0.1-p1
1.0.0
0.40.6
0.40.5
0.40.4
0.40.3
0.40.2
0.40.1
0.40.0
0.39.1
0.39.0
0.38.6
0.38.5
0.38.4
0.38.3
0.38.2
0.38.1
0.38.0
0.37.5
0.37.4
0.37.3
0.37.2
0.37.1
0.37.0
0.34.0
0.33.2
0.33.1
0.33.0
0.32.2
0.32.1
0.32.0
0.31.1
0.31.0
0.30.0
0.29.1
0.29.0
0.28.3
0.28.2
0.28.1
0.28.0
0.27.4
0.27.3
0.27.2
0.27.1
0.27.0
0.26.6
0.26.5
0.26.4
0.26.3
0.26.1
0.26.0
Elixir / Erlang version of the SDK for Forge framework.
Current section
Files
Jump to
Current section
Files
lib/forge_sdk/protocol/display/datetime.ex
defimpl ForgeSdk.Display, for: Google.Protobuf.Timestamp do
@moduledoc """
Implementation of `Display` protocol for `Timestamp`
"""
alias ForgeSdk.DateTimeUtils
def display(%{seconds: seconds}, expand? \\ false) do
dt =
case DateTime.from_unix(seconds) do
{:ok, date} -> date
_ -> DateTime.from_unix!(0)
end
case expand? do
true -> DateTimeUtils.format_date(dt)
_ -> dt
end
end
end
defimpl ForgeSdk.Display, for: DateTime do
@moduledoc """
Implementation of `Display` protocol for `Timestamp`
"""
alias ForgeSdk.DateTimeUtils
def display(data, true), do: DateTimeUtils.format_date(data)
def display(data, _), do: data
end
defmodule ForgeSdk.DateTimeUtils do
@moduledoc """
Convert date time to human readable formation
"""
@min 60
@hour @min * 60
@day @hour * 24
def format_date(datetime) do
diff = DateTime.diff(DateTime.utc_now(), datetime)
cond do
diff < 0 -> DateTime.to_string(datetime)
diff < @min -> "#{seconds(diff)} seconds ago"
diff < @hour -> "#{minutes(diff)} minutes #{seconds(diff)} seconds ago"
diff < @day -> "#{hours(diff)} hours #{minutes(diff)} minutes ago"
diff < @day * 30 -> "#{days(diff)} days #{hours(diff)} ago"
true -> DateTime.to_string(datetime)
end
end
defp days(seconds), do: div(seconds, @day)
defp hours(seconds), do: seconds |> rem(@day) |> div(@hour)
defp minutes(seconds), do: seconds |> rem(@hour) |> div(@min)
defp seconds(seconds), do: rem(seconds, @min)
end