首页 > 解决方案 > 给定月份和日期的最新日期

问题描述

使用 Ruby/Rails 获取具有给定月份和日期的日期的最后一次出现的最佳方法是什么。返回值应该是一个 Date 对象。

IE:

prev_occuring(月,日)

today = Date.today               # => Thu, 14 Dec 2019
today.prev_occurring(:june, 1)   # => Sat, 1 Jun 2019

or 

today = Date.today               # => Thu, 9 Jan 2020
today.prev_occurring(:june, 1)   # => Sat, 1 Jun 2019

标签: ruby-on-railsruby

解决方案


当然,有不止一种方法可以做到这一点。

但这是一种方法:

$> Date.parse('28 dec').then { |date| date.advance(years: (date > Date.today ? -1 : 0)) }
=> Fri, 28 Dec 2018
$> Date.parse('3 feb').then { |date| date.advance(years: (date > Date.today ? -1 : 0)) }
=> Sun, 03 Feb 2019

或者,您可以选择更明确(即不依赖Date.parse魔法)......

您可以使用Date::MONTHNAMES来获取月份编号,然后编写一些条件来检查给定日期是否在日历年中的当前日期之后。

那么使用Date.new年/月/日值而不是Date#advance.


推荐阅读