datetimeelixirtimex

Format date with Elixir


I'm trying to format the Timex module to look a certain way. I'm trying to get today's date. but I want it formatted like this:

2017/12/12.

year/mn/day

In ruby I would go to the strftime class but I'm not sure how to do this with Elixir:

Current attempt:

Timex.local => #DateTime<2017-12-12 19:57:17.232916-05:00 EST America/Detroit>

How can I take that and format it how I specified?


Solution

  • Timex is a third-party library that was created in the era when Elixir had no good support for dates/times. Nowadays, there is DateTime native class in the core, so I am unsure why do you want to use Timex at all.

    In any case, DateTime is a struct:

    iex|1 ▶ today = DateTime.utc_now
    #⇒ #DateTime<2017-12-13 07:22:58.290075Z>
    iex|2 ▶ [today.year, today.month, today.day]
    #⇒ [2017, 12, 13]
    iex|3 ▶ Enum.join [today.year, today.month, today.day], "/"
    #⇒ "2017/12/13"
    

    To pad with leading zeroes for "2018/1/1":

    iex|4 ▶ with {:ok, today} <- Date.new(2018, 1, 1) do
    ...|4 ▶   [today.year, today.month, today.day]
    ...|4 ▶   |> Enum.map(&to_string/1)
    ...|4 ▶   |> Enum.map(&String.pad_leading(&1, 2, "0"))
    ...|4 ▶   |> Enum.join("/")
    ...|4 ▶ end
    #⇒ "2018/01/01"