如何在长生不老药中获得上个月
How to get previous month in elixir
如何在不使用 elixir 中的包或库的情况下获取上个月?
例如,如果当前日期是2018-01-25
,我将得到2017-12-25
。
或者如果当前日期是2018-03-31
,我会得到2018-02-28
(2018年不是闰年)
使用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]
@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]
如何在不使用 elixir 中的包或库的情况下获取上个月?
例如,如果当前日期是2018-01-25
,我将得到2017-12-25
。
或者如果当前日期是2018-03-31
,我会得到2018-02-28
(2018年不是闰年)
使用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]
@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]