Elixir的日期范围?

Edw*_*ler 7 elixir

Elixir是否支持日期范围?例如,在Elixir中可以使用这样的Ruby代码吗?

require 'date'

d1 = Date::civil 2015, 1, 1
d2 = Date::civil 2015, 1, 7

(d1..d2).each {|d| puts d }
Run Code Online (Sandbox Code Playgroud)

输出:

2015-01-01
2015-01-02
2015-01-03
2015-01-04
2015-01-05
2015-01-06
2015-01-07

小智 8

是的,

使用日期模块

range = Date.range(~D[2001-01-01], ~D[2002-01-01])

Enum.each(range, fn(x) -> IO.puts x end)

Run Code Online (Sandbox Code Playgroud)

输出

2001-01-01
2001-01-02
2001-01-03
2001-01-04
2001-01-05
2001-01-06
2001-01-07
2001-01-08
2001-01-09
2001-01-10

Run Code Online (Sandbox Code Playgroud)

到最后一天即 2002-01-01


Ono*_*cci 4

@bitwalker 的建议非常好。如果你想在“原生”Elixir 代码中执行此操作:

def generate_all_valid_dates_in_range(start_date, end_date) when start_date <= end_date do
  (:calendar.date_to_gregorian_days(start_date) .. :calendar.date_to_gregorian_days(end_date))
  |> Enum.to_list
  |> Enum.map (&(:calendar.gregorian_days_to_date(&1)))
end
Run Code Online (Sandbox Code Playgroud)

有关此解决方案以及我如何在 Elixir 社区的大量帮助下设计该解决方案的更多信息,请参阅我的博客。但在我看来,Timex 是一个更好的解决方案。