Как получить предыдущий месяц в эликсире - PullRequest
0 голосов
/ 20 ноября 2018

Как я могу получить предыдущий месяц без использования пакета или библиотеки в эликсире?

Например, если текущая дата 2018-01-25, я получу 2017-12-25.Или, если текущая дата 2018-03-31, я получу 2018-02-28 (2018 год не високосный)

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Ответ @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]
0 голосов
/ 20 ноября 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]
...