Skip to content

Commit ab2672a

Browse files
Erstelle Date ranges fuer Zeitraeume
1 parent ee041a0 commit ab2672a

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

lib/zeitraum.ex

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)