Packages
timex
0.19.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/parse/datetime/helpers.ex
defmodule Timex.Parse.DateTime.Helpers do
@moduledoc false
import Combine.Parsers.Base
import Combine.Parsers.Text, except: [integer: 0, integer: 1]
alias Combine.Parsers.Text
@weekdays_abbr ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]
@weekdays ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]
@months [
"January", "February", "March", "April",
"May", "June", "July", "August",
"September", "October", "November", "December"
]
def months, do: @months
def to_month(month) when is_integer(month), do: [month: month]
def to_month_num(nil), do: fail("Invalid month value.")
def to_month_num(m) when m in ["January", "Jan"], do: to_month(1)
def to_month_num(m) when m in ["February", "Feb"], do: to_month(2)
def to_month_num(m) when m in ["March", "Mar"], do: to_month(3)
def to_month_num(m) when m in ["April", "Apr"], do: to_month(4)
def to_month_num(m) when m in ["May", "May"], do: to_month(5)
def to_month_num(m) when m in ["June", "Jun"], do: to_month(6)
def to_month_num(m) when m in ["July", "Jul"], do: to_month(7)
def to_month_num(m) when m in ["August", "Aug"], do: to_month(8)
def to_month_num(m) when m in ["September", "Sep"], do: to_month(9)
def to_month_num(m) when m in ["October", "Oct"], do: to_month(10)
def to_month_num(m) when m in ["November", "Nov"], do: to_month(11)
def to_month_num(m) when m in ["December", "Dec"], do: to_month(12)
def is_weekday(name) do
n = String.downcase(name)
cond do
n in @weekdays_abbr -> true
n in @weekdays -> true
true -> false
end
end
def to_weekday(name) do
n = String.downcase(name)
case n do
n when n in ["mon", "monday"] -> 1
n when n in ["tue", "tuesday"] -> 2
n when n in ["wed", "wednesday"] -> 3
n when n in ["thu", "thursday"] -> 4
n when n in ["fri", "friday"] -> 5
n when n in ["sat", "saturday"] -> 6
n when n in ["sun", "sunday"] -> 7
end
end
def to_sec_ms(sec, fraction) do
{n, _} = Float.parse("0.#{fraction}")
[sec: sec, sec_fractional: (1_000*n) |> Float.round |> trunc]
end
def to_ampm("am"), do: [am: "am"]
def to_ampm("AM"), do: [AM: "AM"]
def to_ampm("pm"), do: [am: "pm"]
def to_ampm("PM"), do: [AM: "PM"]
def integer(opts \\ []) do
min_width = get_in(opts, [:min]) || -1
max_width = get_in(opts, [:max])
padding = get_in(opts, [:padding])
case {padding, min_width, max_width} do
{:zeroes, _, nil} -> Text.integer
{:zeroes, _, max} -> fixed_integer(max)
{:spaces, -1, nil} -> skip(spaces) |> Text.integer
{:spaces, min, nil} -> skip(spaces) |> fixed_integer(min)
{:spaces, _, max} -> skip(spaces) |> choice(Enum.map(max..1, &(fixed_integer(&1))))
{_, -1, nil} -> Text.integer
{_, min, nil} -> fixed_integer(min)
{_, min, max} -> choice(Enum.map(max..min, &(fixed_integer(&1))))
end
end
end