如果能将它放在标准 Elixir 库中就好了,但我们没有。
Date.add(date, n, :month) # where n could be +/-
Run Code Online (Sandbox Code Playgroud)
你会如何实施这个?
这看起来是一个很好的起点:https ://stackoverflow.com/a/53407676/44080
在Aleksei回答的最后一个问题中,我试图查找给定日期的上个月。现在,我正尝试做相反的事情:
defmodule Dating do
def next_month(%Date{year: year, month: month, day: day} = date) do
first_day_of_next_month = Date.add(date, Calendar.ISO.days_in_month(year, month) - day + 1)
%{year: year, month: month} = first_day_of_next_month
Date.add(first_day_of_next_month, min(day, Calendar.ISO.days_in_month(year, month)) - 1)
end
end
Run Code Online (Sandbox Code Playgroud)
尽管代码可以正常运行,但我希望有更好的方法可以做到这一点:
iex|1 ? Dating.next_month(~D[2018-12-31])
#? ~D[2019-01-31]
iex|2 ? Dating.next_month(~D[2018-02-28])
#? ~D[2018-03-28]
iex|3 ? Dating.next_month(~D[2018-01-31])
#? ~D[2018-02-28]
iex|3 ? Dating.next_month(~D[2018-01-30])
#? ~D[2018-02-28]
Run Code Online (Sandbox Code Playgroud)
注意:请不要建议使用第三方Elixir软件包