ruby - 获取本月的最后一个星期日

标签 ruby chronic

我正在使用 Chronic 获取任何给定年份的月份的最后一个星期日。它很乐意给我第 n‌ 个星期日,但不是最后一个。

这有效,但不是我需要的:

Chronic.parse('4th sunday in march', :now => Time.local(2015,1,1))

这是我需要的,但不起作用:

Chronic.parse('last sunday in march', :now => Time.local(2015,1,1))

有什么办法可以解决这个明显的限制吗?

更新:我赞成下面的两个答案,因为它们都很好,但我已经在“纯 Ruby”中实现了它(在 2 行中代码,除了 require 'date' 行),但我试图向管理层证明 Ruby 是用于替换即将消失的 Java 代码库(并且有几十个行代码来计算这个),我告诉一位经理,我可能可以用一行 Ruby 来完成它,而且它可读性强且易于维护。

最佳答案

我不确定 Chronic(我以前没听说过),但我们可以用纯 ruby​​ 实现它:)

##
# returns a Date object being the last sunday of the given month/year
# month: integer between 1 and 12
def last_sunday(month,year)
  # get the last day of the month
  date = Date.new year, month, -1
  #subtract number of days we are ahead of sunday
  date -= date.wday
end

last_sunday 方法可以这样使用:

last_sunday 07, 2013
#=> #<Date: 2013-07-28 ((2456502j,0s,0n),+0s,2299161j)>

关于ruby - 获取本月的最后一个星期日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17973248/

相关文章:

ruby-on-rails - 在 Rails 中添加 created_at DESC 功能

ruby-on-rails - 单表继承(STI)场景中的类型转换基类模型

ruby-on-rails - Rails - 如何创建链接到另一个模型的两个模型

ruby - 计算 ruby​​ 中子字符串列表出现次数的最快方法

ruby-on-rails - 为什么 Chronic 错误地解析了四个字母的月份?

ruby - 如何在没有rails的情况下将ruby Gem Chronic的默认时区设置为特定时区

ruby-on-rails - rails : Custom validations using ActiveModel

ruby-on-rails - 测试 Rails 助手是否呈现部分