@@ -30,49 +30,58 @@ defmodule Shared.Zeitraum do
3030 ## Beispiel:
3131
3232 iex> als_daterange(~Z[2025-01-01/2025-01-03])
33- Date.range(~D[2025-01-01], ~D[2025-01-03 ])
33+ Date.range(~D[2025-01-01], ~D[2025-01-02 ])
3434
35- iex> als_daterange(~Z[2025-01-01 12 :00:00/2025-01-03 00:00:00])
36- Date.range(~D[2025-01-02 ], ~D[2025-01-02])
35+ iex> als_daterange(~Z[2025-01-01 00 :00:00/2025-01-03 00:00:00])
36+ Date.range(~D[2025-01-01 ], ~D[2025-01-02])
3737
3838 iex> als_daterange(~Z[2025-01-01 00:00:00/2025-01-03 12:00:00])
3939 Date.range(~D[2025-01-01], ~D[2025-01-02])
4040
41- iex> als_daterange(~Z[2025-01-01 00 :00:00/2025-01-03 12 :00:00], truncate_until: false )
42- Date.range(~D[2025-01-01 ], ~D[2025-01-03 ])
41+ iex> als_daterange(~Z[2025-01-01 12 :00:00/2025-01-03 00 :00:00])
42+ Date.range(~D[2025-01-02 ], ~D[2025-01-02 ])
4343
4444 iex> als_daterange(~Z[2025-01-01 12:00:00/2025-01-03 12:00:00])
4545 Date.range(~D[2025-01-02], ~D[2025-01-02])
4646
47+ iex> als_daterange(~Z[2025-01-01 00:00:00/2025-01-03 12:00:00], truncate_until: false)
48+ Date.range(~D[2025-01-01], ~D[2025-01-03])
49+
4750 iex > als_daterange(~Z[2025-01-01 12:00:00/2025-01-03 12:00:00], truncate_from: false)
4851 Date.range(~D[2025-01-01], ~D[2025-01-02])
52+
53+ iex> als_daterange(~Z[2025-01-01 12:00:00/2025-01-01 13:00:00], truncate_from: false, truncate_until: false)
54+ Date.range(~D[2025-01-01], ~D[2025-01-01])
55+
56+ iex> als_daterange(~Z[2025-01-01 00:00:00/2025-01-01 12:00:00]) |> Enum.empty?()
57+ true
58+
59+ iex> als_daterange(~Z[2025-01-01 10:00:00/2025-01-02 12:00:00]) |> Enum.empty?()
60+ true
4961 """
5062 def als_daterange ( % Date.Range { } = zeitraum ) , do: zeitraum
5163
5264 def als_daterange ( zeitraum , opts \\ [ ] ) do
5365 intervall = als_intervall ( zeitraum )
54- from = NaiveDateTime . to_date ( intervall . from )
55- until = NaiveDateTime . to_date ( intervall . until )
5666
57- date_only_range =
58- Map . get ( intervall , :right_open , false ) == true and
59- ~T[ 00:00:00] == NaiveDateTime . to_time ( intervall . from ) and
60- ~T[ 00:00:00] == NaiveDateTime . to_time ( intervall . until )
67+ from_date = NaiveDateTime . to_date ( intervall . from )
68+ until_date = NaiveDateTime . to_date ( intervall . until )
69+
70+ from_time = NaiveDateTime . to_time ( intervall . from )
71+ until_time = NaiveDateTime . to_time ( intervall . until )
6172
6273 truncate_from = Keyword . get ( opts , :truncate_from , true )
63- truncate_until = ! date_only_range or Keyword . get ( opts , :truncate_until , true )
74+ truncate_until = Keyword . get ( opts , :truncate_until , true )
6475
6576 from =
66- if truncate_from and ~T[ 00:00:00] != NaiveDateTime . to_time ( intervall . from ) ,
67- do: Date . add ( from , 1 ) ,
68- else: from
77+ if truncate_from and from_time != ~T[ 00:00:00] , do: Date . add ( from_date , 1 ) , else: from_date
6978
7079 until =
71- if truncate_until and ~T[ 00:00:00] == NaiveDateTime . to_time ( intervall . until ) ,
72- do: Date . add ( until , - 1 ) ,
73- else: until
80+ if truncate_until or until_time == ~T[ 00:00:00] ,
81+ do: Date . add ( until_date , - 1 ) ,
82+ else: until_date
7483
75- Date . range ( from , until )
84+ Date . range ( from , until , 1 )
7685 end
7786
7887 @ doc """
0 commit comments