【发布时间】:2013-07-31 14:31:14
【问题描述】:
我正在使用 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 就可以做到,而且它可读且易于维护。
【问题讨论】:
-
一个相当俗气的想法,但你可以从四月的第一天开始,然后在“昨天”的循环中继续向后走,当你到达第一个星期日时爆发......跨度>
-
@aardvarkk 刚刚在你写评论时实现了这个想法 :)
-
@aardvarkk:那你可以写
Chronic.parse('1 week before 1st sunday in april')。 -
@iconoclast:糟糕,抱歉。文档给出了
7 hours before tomorrow at noon的例子,所以我假设[interval] before [...]表示法更普遍。我的错。 -
关于您的更新:您可以(或可能)在一行中使用
Chronic编写此内容,因为您只需调用一个函数。然而,使用这个参数,你基本上是在说你可以用一行代码调用一个 ruby 函数。Chronic可能需要不止一行来实现这一点;)