datetime - 如何在长生不老药中获得上个月
问题描述
如何在不使用 elixir 中的包或库的情况下获得上个月的数据?
例如,如果当前日期是2018-01-25
,我会得到2017-12-25
。或者如果当前日期是2018-03-31
,我会得到2018-02-28
(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]
推荐阅读
- c# - 如何在AngularJS中将十进制解析为固定的2位数字
- c - 使用循环从数组中的元素中查找累积和?
- php - 无法在 dialogflow(api.ai) 中解析 webhook json 响应
- android - FireStorePagingAdapter 未接收实时更新
- python - 按顺序固定列
- php - preg_match 与多个查找
- ruby-on-rails - Rails ActiveQuery 接口
- web-services - 在 ColdFusion 中创建服务
- javascript - 如何在角度 4 中设置授权标头(不在 Access-Control-Request-Headers 内)。它应该是授权:值
- r - 有条件地替换数组中的值