Skip to content

Commit e5c092f

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

File tree

1 file changed

+28
-19
lines changed

1 file changed

+28
-19
lines changed

lib/zeitraum.ex

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

Comments
 (0)