@@ -30,47 +30,50 @@ 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/2025-01-03]r)
36+ Date.range(~D[2025-01-01], ~D[2025-01-02])
37+
38+ iex> als_daterange(~Z[2025-01-01 00:00:00/2025-01-03 00:00:00])
39+ Date.range(~D[2025-01-01], ~D[2025-01-02])
3740
3841 iex> als_daterange(~Z[2025-01-01 00:00:00/2025-01-03 12:00:00])
3942 Date.range(~D[2025-01-01], ~D[2025-01-02])
4043
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 ])
44+ iex> als_daterange(~Z[2025-01-01 12 :00:00/2025-01-03 00 :00:00])
45+ Date.range(~D[2025-01-02 ], ~D[2025-01-02 ])
4346
4447 iex> als_daterange(~Z[2025-01-01 12:00:00/2025-01-03 12:00:00])
4548 Date.range(~D[2025-01-02], ~D[2025-01-02])
4649
50+ iex> als_daterange(~Z[2025-01-01 00:00:00/2025-01-03 12:00:00], truncate_until: false)
51+ Date.range(~D[2025-01-01], ~D[2025-01-03])
52+
4753 iex > als_daterange(~Z[2025-01-01 12:00:00/2025-01-03 12:00:00], truncate_from: false)
4854 Date.range(~D[2025-01-01], ~D[2025-01-02])
4955 """
5056 def als_daterange ( % Date.Range { } = zeitraum ) , do: zeitraum
5157
5258 def als_daterange ( zeitraum , opts \\ [ ] ) do
5359 intervall = als_intervall ( zeitraum )
54- from = NaiveDateTime . to_date ( intervall . from )
55- until = NaiveDateTime . to_date ( intervall . until )
5660
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 )
61+ from_date = NaiveDateTime . to_date ( intervall . from )
62+ until_date = NaiveDateTime . to_date ( intervall . until )
63+
64+ from_time = NaiveDateTime . to_time ( intervall . from )
65+ until_time = NaiveDateTime . to_time ( intervall . until )
6166
6267 truncate_from = Keyword . get ( opts , :truncate_from , true )
63- truncate_until = ! date_only_range or Keyword . get ( opts , :truncate_until , true )
68+ truncate_until = Keyword . get ( opts , :truncate_until , true )
6469
6570 from =
66- if truncate_from and ~T[ 00:00:00] != NaiveDateTime . to_time ( intervall . from ) ,
67- do: Date . add ( from , 1 ) ,
68- else: from
71+ if truncate_from and from_time != ~T[ 00:00:00] , do: Date . add ( from_date , 1 ) , else: from_date
6972
7073 until =
71- if truncate_until and ~T[ 00:00:00] == NaiveDateTime . to_time ( intervall . until ) ,
72- do: Date . add ( until , - 1 ) ,
73- else: until
74+ if truncate_until or until_time == ~T[ 00:00:00] ,
75+ do: Date . add ( until_date , - 1 ) ,
76+ else: until_date
7477
7578 Date . range ( from , until )
7679 end
0 commit comments