Packages
timex
3.7.2
3.7.13
3.7.12
3.7.11
3.7.9
3.7.8
3.7.7
3.7.6
3.7.5
3.7.3
3.7.2
3.7.1
3.7.0
3.6.4
3.6.3
3.6.2
retired
3.6.1
3.6.0
3.5.0
3.4.2
3.4.1
3.3.0
3.2.2
3.2.1
3.2.0
3.1.25
retired
3.1.24
3.1.23
3.1.22
3.1.21
3.1.20
3.1.19
3.1.18
3.1.17
3.1.16
3.1.15
3.1.13
3.1.12
3.1.11
3.1.10
3.1.9
3.1.8
3.1.7
3.1.6
3.1.5
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.8
3.0.7
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.2.1
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.0
1.0.2
1.0.1
1.0.0
1.0.0-rc4
1.0.0-rc3
1.0.0-rc2
1.0.0-rc1
1.0.0-pre
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.2
0.18.1
0.18.0
0.17.0
0.16.2
0.16.1
0.16.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.9
0.12.8
0.12.7
0.12.6
0.12.5
0.12.4
0.12.3
0.12.2
0.12.1
0.12.0
0.11.0
0.10.2
0.10.1
0.10.0
0.9.0
0.8.0
0.7.1
0.6.0
0.5.0
0.4.8
0.4.7
0.4.6
Timex is a rich, comprehensive Date/Time library for Elixir projects, with full timezone support via the :tzdata package. If you need to manipulate dates, times, datetimes, timestamps, etc., then Timex is for you!
Current section
Files
Jump to
Current section
Files
lib/format/duration/formatter.ex
defmodule Timex.Format.Duration.Formatter do
@moduledoc """
This module defines the behaviour for custom Time formatters
"""
use Timex
alias Timex.Translator
alias Timex.Duration
alias Timex.Format.Duration.Formatters.Default
alias Timex.Format.Duration.Formatters.Humanized
defmacro __using__(_) do
quote do
alias Timex.Duration
@behaviour Timex.Format.Duration.Formatter
end
end
@callback format(Duration.t()) :: String.t() | {:error, term}
@callback lformat(Duration.t(), locale :: String.t()) :: String.t() | {:error, term}
@doc """
Formats a Duration as a string, using the provided
formatter. If a formatter is not provided, the formatter used is
`Timex.Format.Duration.Formatters.Default`. As a handy shortcut, you can reference
the other built-in formatter (Humanized) via the :humanized atom as shown below.
# Examples
iex> d = Timex.Duration.from_erl({1435, 180354, 590264})
...> #{__MODULE__}.format(d)
"P45Y6M5DT21H12M34.590264S"
"""
@spec format(Duration.t()) :: String.t() | {:error, term}
def format(duration), do: lformat(duration, Translator.current_locale(), Default)
@doc """
Same as format/1, but takes a formatter name as an argument
## Examples
iex> d = Timex.Duration.from_erl({1435, 180354, 590264})
...> #{__MODULE__}.format(d, :humanized)
"45 years, 6 months, 5 days, 21 hours, 12 minutes, 34 seconds, 590.264 milliseconds"
"""
@spec format(Duration.t(), atom) :: String.t() | {:error, term}
def format(duration, formatter), do: lformat(duration, Translator.current_locale(), formatter)
@doc """
Same as format/1, but takes a locale name as an argument, and translates the format string,
if the locale has translations.
"""
@spec lformat(Duration.t(), String.t()) :: String.t() | {:error, term}
def lformat(duration, locale), do: lformat(duration, locale, Default)
@doc """
Same as lformat/2, but takes a formatter as an argument
"""
@spec lformat(Duration.t(), String.t(), atom) :: String.t() | {:error, term}
def lformat(%Duration{} = duration, locale, formatter)
when is_binary(locale) and is_atom(formatter) do
case formatter do
:humanized -> Humanized.lformat(duration, locale)
_ -> formatter.lformat(duration, locale)
end
end
def lformat(_, _, _), do: {:error, :invalid_duration}
end