Datetime 如何获得上个月的长生不老药

Datetime 如何获得上个月的长生不老药,datetime,calendar,erlang,elixir,Datetime,Calendar,Erlang,Elixir,如果不使用elixir中的包或库,如何获取上个月的数据 例如,如果当前日期为2018-01-25,我将得到2017-12-25。 或者,如果当前日期是2018-03-31,我将获得2018-02-28(2018年不是闰年)使用库 @Sheharyar的答案几乎就在这里,你只需要减去两个月的最大天数: defdo def上个月(%Date{day:day}=Date)do 天数=最大值(天,(Date.add(Date,-day)).day) Date.add(日期,-天) 结束 结束 适用于所

如果不使用elixir中的包或库,如何获取上个月的数据

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

使用库


@Sheharyar的答案几乎就在这里,你只需要减去两个月的最大天数:

defdo
def上个月(%Date{day:day}=Date)do
天数=最大值(天,(Date.add(Date,-day)).day)
Date.add(日期,-天)
结束
结束
适用于所有情况:

iex | 1▶ 日期。上个月(~D[2018-03-31])
#⇒~D[2018-02-28]
iex | 2▶ 日期。上个月(~D[2018-03-01])
#⇒~D[2018-02-01]
iex | 3▶ 日期。上个月(~D[2018-01-02])
#⇒~D[2017-12-02]

但我不想使用库来完成。是的,没错。这太复杂了,你需要创建一些助手来完成它。这相当于拥有一个图书馆,但由你自己制作。让我们等待其他答案,也许我错了。我查看了Timex库的源代码,发现它太复杂了,无法生成Timex.shift函数。现在我考虑使用TimeX库。谢谢你的回答。哇,实际上好多了。我会保留我的答案以备将来参考,但我认为这是应该使用的。不管怎样,我还是删除了它,因为这是更好的解决方案。(还有徽章:P)@Sheharyar ROFL;事实上,这个答案完全受你的启发(以及我看到Timex实现时眼睛流血的痛苦)。哇,谢谢你这个伟大的答案!我正准备使用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]