【问题标题】:converting day and time to date in future using Elixir使用 Elixir 将日期和时间转换为将来的日期
【发布时间】:2022-01-14 12:30:16
【问题描述】:

我有这个数据

%{
  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")

这很好用。但我想请教一下是否有更简单的方法来解决这个问题?

【问题讨论】:

    标签: elixir


    【解决方案1】:

    我不知道为什么要使用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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多