如何在长生不老药中获得上个月

Dye*_*517 4 erlang datetime calendar elixir

如何在不使用 elixir 中的包或库的情况下获得上个月的数据?

例如,如果当前日期是2018-01-25,我将得到2017-12-25。或者如果当前日期是2018-03-31,我会得到2018-02-28(2018 年不是闰年)

Ale*_*kin 5

通过@Sheharyar答案是几乎没有,你需要减去最大的天,唯一的区别在这两个月份:

defmodule Dating do
  def previous_month(%Date{day: day} = date) do
    days = max(day, (Date.add(date, -day)).day)
    Date.add(date, -days)
  end
end
Run Code Online (Sandbox Code Playgroud)

适用于所有情况:

iex|1 ? Dating.previous_month(~D[2018-03-31])
#? ~D[2018-02-28]
iex|2 ? Dating.previous_month(~D[2018-03-01])
#? ~D[2018-02-01]
iex|3 ? Dating.previous_month(~D[2018-01-02])
#? ~D[2017-12-02]
Run Code Online (Sandbox Code Playgroud)

  • @Sheharyar ROFL;实际上,这个答案完全受到您的启发(以及当我看到 Timex 实施时我眼中流血的痛苦。) (2认同)