如何获得长生不老药

时间:2018-11-20 14:05:28

标签: datetime calendar erlang elixir

如何在不使用elixir的程序包或库的情况下得到上个月?

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

2 个答案:

答案 0 :(得分:3)

@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

适用于所有情况:

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]

答案 1 :(得分:2)

使用Timex

iex(1)> ~D[2018-01-25] |> Timex.shift(months: -1)
~D[2017-12-25]

iex(2)> ~D[2018-03-31] |> Timex.shift(months: -1)
~D[2018-02-28]