Packages
bpe
2.4.0
13.5.22-aleph
11.4.16
11.4.15
11.4.14
11.4.13
9.9.7
9.9.6
8.12.4
8.12.3
8.12.1
8.12.0
retired
8.2.1
8.2.0
8.1.0
7.11.0
7.10.4
7.10.3
7.10.2
7.10.1
7.9.1
7.9.0
7.8.2
7.8.1
7.8.0
7.6.4
7.6.3
7.6.2
7.6.1
7.6.0
7.5.15
7.5.14
7.5.13
7.5.12
7.5.11
7.5.10
7.5.9
7.5.8
7.5.7
7.5.6
7.5.5
7.5.3
7.5.2
7.5.1
7.5.0
7.4.11
7.4.10
7.4.9
7.4.8
7.4.7
7.4.6
7.4.5
7.4.4
7.4.3
7.4.2
7.4.1
7.4.0
7.3.0
7.2.8
7.2.7
7.2.6
7.1.6
7.1.5
7.1.4
7.1.3
7.1.2
6.12.7
6.12.6
6.12.5
6.12.3
6.12.2
6.12.1
6.12.0
6.11.0
6.10.0
6.5.3
6.5.2
6.5.1
6.5.0
6.4.0
6.3.0
5.12.0
5.11.4
5.11.3
5.11.2
5.11.1
5.11.0
5.8.7
5.8.6
5.8.5
5.8.4
5.8.3
5.8.2
5.8.1
5.8.0
5.7.0
5.6.0
5.5.2
5.5.1
5.4.0
5.2.0
5.1.3
5.1.2
5.1.1
4.12.4
4.12.3
4.12.2
4.12.1
4.12.0
4.11.8
4.11.7
4.11.6
4.11.5
4.11.4
4.11.3
4.11.2
4.11.1
4.11.0
4.10.24
4.10.23
4.10.22
4.10.21
4.10.20
4.10.19
4.10.18
4.10.17
4.10.16
4.10.15
4.10.14
4.10.13
4.10.12
4.10.11
4.10.10
4.10.9
4.10.8
4.10.7
4.10.6
4.10.5
4.10.4
4.10.3
4.10.2
4.10.1
4.10.0
4.9.18
4.9.17
4.9.16
4.9.15
4.9.14
4.9.13
4.9.12
4.9.11
4.9.10
4.9.9
4.9.8
4.9.7
4.9.6
4.9.5
4.9.4
4.9.3
4.9.2
4.9.1
4.9.0
4.8.1
4.8.0
4.7.5
4.7.3
4.7.2
4.7.1
4.7.0
4.6.0
2.4.0
0.7.16
ERP/1: RTP GST WebRTC ICE SDP H.264 H.265 MP4 MPEG-2 HLS HEVC
Current section
Files
Jump to
Current section
Files
src/bpe_date.erl
-module(bpe_date).
-author('David Weldon').
-license('APACHE').
-compile(export_all).
beginning_of_month({Y, M, _D}) -> {Y, M, 1}.
date_to_string({Y, M, D}) ->
true = calendar:valid_date({Y, M, D}),
lists:flatten(io_lib:format("~4..0B-~2..0B-~2..0B", [Y, M, D])).
day_of_week(Date) ->
case calendar:day_of_the_week(Date) of
1 -> "monday";
2 -> "tuesday";
3 -> "wednesday";
4 -> "thursday";
5 -> "friday";
6 -> "saturday";
7 -> "sunday"
end.
easter(Year) ->
NCent = Year div 100,
NRemain19 = Year rem 19,
N1Tmp1 = fix(NCent, ((NCent - 15) div 2) + 202 - (11 * NRemain19)),
N1Tmp2 = N1Tmp1 rem 30,
N1 =
case N1Tmp2 == 29 orelse (N1Tmp2 == 28 andalso NRemain19 > 10) of
true -> N1Tmp2 - 1;
false -> N1Tmp2
end,
DtPFM =
case N1 > 10 of
true -> {Year, 4, N1 - 10};
false -> {Year, 3, N1 + 21}
end,
NWeekDay = calendar:day_of_the_week(DtPFM) rem 7,
shift(DtPFM, 7 - NWeekDay, days).
fix(NCent, N1) when NCent >= 38 -> N1 - 2;
fix(NCent, N1) when NCent == 21 orelse NCent == 24 orelse NCent == 25 -> N1 - 1;
fix(NCent, N1) when NCent == 33 orelse NCent == 36 orelse NCent == 37 -> N1 - 2;
fix(NCent, N1) when NCent > 26 -> N1 - 1;
fix(_NCent, N1) -> N1.
end_of_month({Y, M, _D}) -> {Y, M, calendar:last_day_of_the_month(Y, M)}.
is_after(Date1, Date2) -> subtract(Date1, Date2) > 0.
is_before(Date1, Date2) -> subtract(Date1, Date2) < 0.
is_in_future(Date) -> subtract(Date, today()) > 0.
is_in_past(Date) -> subtract(Date, today()) < 0.
shift(N, Period) -> shift(date(), N, Period).
shift(Date, N, Period) when Period =:= day; Period =:= days -> calendar:gregorian_days_to_date(calendar:date_to_gregorian_days(Date) + N);
shift(Date, N, Period) when Period =:= week; Period =:= weeks -> shift(Date, 7*N, days);
shift(Date, N, Period) when Period =:= year; Period =:= years -> shift(Date, 12*N, months);
shift({Y, M, D}, N, Period) when Period =:= month; Period =:= months ->
TotalMonths = 12*Y + M-1 + N,
case TotalMonths >= 0 of
true ->
Month = TotalMonths rem 12,
Year = (TotalMonths - Month) div 12,
%% add one back to the month to fix our mod 12 shenanigans
find_valid_date({Year, Month+1, D});
false ->
error(out_of_bounds)
end.
find_valid_date(Date) ->
case calendar:valid_date(Date) of
true -> Date;
false ->
{Y, M, D} = Date,
find_valid_date({Y, M, D-1})
end.
string_to_date(String) ->
[Year, Month, Day] =
case string:tokens(String, "-/") of
[Y, M, D] when length(Y) =:= 4 -> [Y, M, D];
[M, D, Y] when length(Y) =:= 4 -> [Y, M, D]
end,
Date = list_to_tuple([list_to_integer(X) || X <- [Year, Month, Day]]),
true = calendar:valid_date(Date),
Date.
subtract(Date1, Date2) ->
calendar:date_to_gregorian_days(Date1) -
calendar:date_to_gregorian_days(Date2).
today() -> date().
tomorrow() -> shift(1, day).
yesterday() -> shift(-1, day).