【问题标题】:How to get previous month in elixir如何在长生不老药中获得上个月
【发布时间】:2019-04-23 00:03:21
【问题描述】:

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

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

【问题讨论】:

  • 我已经删除了我的答案。请参阅 Aleksei 的,这要好得多。

标签: datetime calendar erlang elixir


【解决方案1】:

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

【讨论】:

  • 哇,这实际上好多了。我会保留我的答案以供将来参考,但我认为这是应该使用的。
  • 没关系,我还是删除了它,因为这是更好的解决方案。 (也适用于Disciplined 徽章:P)
  • @Sheharyar ROFL;实际上,这个答案完全受到了您的启发(当我看到 Timex 实施时,我的眼睛流血了。)
  • 哇,感谢您的出色回答!在我尝试这个之前,我正打算使用 Timex 库作为我最后的手段。使用这样的库很痛苦,但你只需要它的一个功能。感谢您的帮助!
  • 伙计们!你能帮我here吗?
【解决方案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]

【讨论】:

  • 但我想在不使用库的情况下做到这一点。
  • 是的,没错。这太复杂了,您需要创建一些助手来完成它。它相当于有一个图书馆,但自己制作。让我们等待其他答案,也许我错了。
  • 我查看了Timex库源代码,我发现它太复杂了,无法制作Timex.shift函数。我现在将考虑使用 Timex 库。感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
相关资源
最近更新 更多