首页 > 解决方案 > 如何在长生不老药中获得上个月

问题描述

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

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

标签: datetimecalendarerlangelixir

解决方案


@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]

推荐阅读