我使用chronic来返回解析后的日期对象,如下所示:
last_pay_date = Date.parse(Chronic.parse('2011-11-04').strftime("%Y-%m-%d"))
two_weeks_ago = Date.parse(Chronic.parse("two weeks ago").strftime("%Y-%m-%d"))
puts last_pay_date # 2011-11-04
puts last_pay_date.class # Date
puts two_weeks_ago # 2011-10-24
puts two_weeks_ago.class # Date
但我真正想做的是约会一个像last_day_date这样的日期对象并在返回前两周保留日期,如下所示:
two_weeks_ago = Date.parse(Chronic.parse("two weeks before #{last_pay_date}").strftime("%Y-%m-%d"))
与其他尝试一样,返回nil,包括变量和硬编码:
last_pay_date = Date.parse(Chronic.parse('2011-11-04').strftime("%Y-%m-%d"))
two_weeks_ago = Chronic.parse("two weeks before #{last_pay_date}")
puts two_weeks_ago.class #NilClass
puts two_weeks_ago.nil? #true
two_weeks_ago = Chronic.parse("2 weeks before 2011-11-04 05:00:00")
puts two_weeks_ago.class #NilClass
puts two_weeks_ago.nil? #true
问题:
我可以使用慢性来解析现有日期对象的偏移量吗? (例如,在此日期之前14天而不是仅仅+14天)。
我可以使用慢性来解析现有日期的偏移吗?
即使解决方案不在慢性病中,如何最好地完成这项工作?
编辑:我正在运行没有rails的Ruby 1.9.2。这些是直接的ruby脚本,但我很乐意包含完成这项工作所需的任何宝石。
答案 0 :(得分:1)
首先,这是Ruby 1.8还是1.9?如果是1.9,则可以使用Date#strptime
方法,这样可以很容易地从字符串中解析日期。
一旦你有了自己的支付日期,即使没有慢性疾病,提前两周也会很容易。
Date.strptime("11/7/2011", "%m/%d/%Y").next_day(-14)
如果这是Ruby 1.8,那么如果ActiveSupport可用(即,如果这是一个Rails应用程序),那么Fixnum扩展会使这个变得微不足道。
last_pay_date - 2.weeks
但是,我怀疑它不可用。在Ruby 1.8.7中,Date#next_day
是私有的,所以你不能直接调用它,但如果你真的想要,你仍然可以调用它。
Date.parse("11/7/2011").send(:next_day, -14)
如果你不介意绕过私人保护,这就可以了。