Current section

Files

Jump to
sun_dial lib sun_dial.ex
Raw

lib/sun_dial.ex

defmodule SunDial do
def format_month(month) when is_integer(month) do
case month do
1 -> "January"
2 -> "February"
3 -> "March"
4 -> "April"
5 -> "May"
6 -> "June"
7 -> "July"
8 -> "August"
9 -> "September"
10 -> "October"
11 -> "November"
12 -> "December"
end
end
def format_month(month) do
format_month(String.to_integer(month))
end
def format_date(%Date{year: year, month: month, day: day}), do: "#{month}/#{day}/#{year}"
def format_date(%NaiveDateTime{year: year, month: month, day: day}), do: "#{month}/#{day}/#{year}"
def format_date(%DateTime{year: year, month: month, day: day}), do: "#{month}/#{day}/#{year}"
def short_date(%NaiveDateTime{year: year, month: month}) do
"#{String.slice(format_month(month), 0..2)} #{year}"
end
def utc_today_with_offset(offset_amount), do: Date.add(Date.utc_today(), offset_amount)
def naive_utc_today_with_offset(offset_amount, precision \\ :second) do
NaiveDateTime.utc_now()
|> NaiveDateTime.add(offset_amount)
|> NaiveDateTime.truncate(precision)
end
def from_iso8601(date), do: with {:ok, date} <- Date.from_iso8601(date), do: date
def format_iso8601_date(date), do: date |> from_iso8601() |> format_date()
def shift_and_format_naive_datetime(naive) do
naive
|> naive_to_datetime()
|> shift_to_est()
|> Calendar.strftime("%a, %b %d %Y, %I:%M %p %Z")
end
def iso8601_to_naive_datetime(date) do
{:ok, date} = Date.from_iso8601(date)
{:ok, datetime} = NaiveDateTime.new(date, ~T[00:00:00.000])
datetime
end
defp naive_to_datetime(naive), do: DateTime.from_naive!(naive, "Etc/UTC")
defp shift_to_est(datetime), do: DateTime.shift_zone!(datetime, "America/New_York", Tzdata.TimeZoneDatabase)
end