使用 Elixir 将日期和时间转换为未来的日期
converting day and time to date in future using Elixir
我有这个数据
%{
day: "sun"
since: ~T[13:30:00],
till: ~T[14:30:00]
}
我正在尝试使用
从中创建一个 DateTime
Enum.reduce_while(1..7, DateTime.utc_now(), fn _day, acc ->
current_day =
acc
|> Timex.weekday()
|> Timex.day_shortname()
|> String.downcase()
if current_day != hour.day,
do: {:cont, Timex.shift(acc, days: 1)},
else: {:halt, acc}
end)
|> DateTime.to_date()
|> NaiveDateTime.new(hour.since)
|> elem(1)
|> DateTime.from_naive!("Etc/UTC")
这很好用。但我想征求一个建议,有没有更简单的方法来解决这个问题?
我不确定为什么要使用 Timex
来计算这种微不足道的数学。您真正需要的是①将适当的天数添加到 Date.utc_today()
和 ② 将其与 hour.since
:
粘合
shift =
~w|mon tue wed thu fri sat sun|
|> Enum.zip(1..7)
|> Map.new()
date = Date.utc_today()
to_add =
Integer.mod(7 + shift[hour.day] - Date.day_of_week(date), 7)
date
|> Date.add(to_add)
|> DateTime.new!(hour.since)
#⇒ ~U[2022-01-16 13:30:00Z]
我有这个数据
%{
day: "sun"
since: ~T[13:30:00],
till: ~T[14:30:00]
}
我正在尝试使用
从中创建一个 DateTimeEnum.reduce_while(1..7, DateTime.utc_now(), fn _day, acc ->
current_day =
acc
|> Timex.weekday()
|> Timex.day_shortname()
|> String.downcase()
if current_day != hour.day,
do: {:cont, Timex.shift(acc, days: 1)},
else: {:halt, acc}
end)
|> DateTime.to_date()
|> NaiveDateTime.new(hour.since)
|> elem(1)
|> DateTime.from_naive!("Etc/UTC")
这很好用。但我想征求一个建议,有没有更简单的方法来解决这个问题?
我不确定为什么要使用 Timex
来计算这种微不足道的数学。您真正需要的是①将适当的天数添加到 Date.utc_today()
和 ② 将其与 hour.since
:
shift =
~w|mon tue wed thu fri sat sun|
|> Enum.zip(1..7)
|> Map.new()
date = Date.utc_today()
to_add =
Integer.mod(7 + shift[hour.day] - Date.day_of_week(date), 7)
date
|> Date.add(to_add)
|> DateTime.new!(hour.since)
#⇒ ~U[2022-01-16 13:30:00Z]