2011-11-29 163 views
2

这可能是一个明显的问题,但即时通讯新的红宝石,我花了很长时间试图让昨天的日期黄瓜测试,检查一个网址,包括昨天的日期。例如: http://www.blah.co.uk/blah/blah/schedule/2011-11-28获取昨天的日期

我已经建立了我的辅助方法中的以下:

def Helper.get_date 
    Time.now.strftime('%Y-%m-%d')/1.day 
end 

但它不喜欢的/1.day– 1.day– 86400(秒)。

回答

6
(Date.today-1).strftime('%Y-%m-%d') 

将是一种非特异性的轨道路。

+0

谢谢!使用这个并且工作得很好。 – IRH301010

+0

Date.yesterday.to_s适用于以GMT时间为准的日期。 (Date.today-1).to_s也可以满足您的需求。根据您的时区有细微的差异。 –

1

用途:

def Helper.get_date 
    (Time.now/1.day).strftime('%Y-%m-%d') 
end 

因为你是减少日期不是一个字符串。

8

你可以使用一些在的ActiveSupport方法(将被纳入,如果你在一个Rails应用程序是)执行以下操作:

DateTime.yesterday.strftime('%Y-%m-%d') 

编辑: 由于这是一个标准的日期格式,你也可以直接引用标准:

DateTime.yesterday.iso8601 
+0

1用于参考['的DateTime#iso8601'](http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html#method-i-iso8601) – Phrogz

0

我会使用类似

def Helper.get_date 
    (Time.now - 60*60*24).strftime('%Y-%m-%d') 
end 

这是一个很好的参考论点的strftime可以采取: http://www.ruby-doc.org/core-1.9.3/Time.html#method-i-strftime

+0

当有更简单的方法存在时,没有理由这样做。 –

+0

@ MarnenLaibow-Koser适当的评论。然而,由于这个答案仍然是_correct_(没有误导或破坏),我会主张提高其他答案,而不是降低这个答案。 _假设你是其中一个downvotes。_ – Phrogz

+0

是的,我是其中一个downvotes。我认为这个答案是误导性的,这意味着这是做到这一点的最佳方式。它也被打破:感谢闰秒,不是每一天都是正好86400秒(怪异但真实)。 –

1

Date.yesterday应该工作:

$ bundle exec rails console 
Loading development environment (Rails 3.0.7) 
ree-1.8.7-2011.03 :001 > Date.yesterday.to_s 
=> "2011-11-29" 
ree-1.8.7-2011.03 :002 > "#{ Date.yesterday }" 
=> "2011-11-29" 
2

作为除了这里的答案之外,我认为值得一提的是Integer和Numerics的典型Ruby on Rails辅助方法:

ruby-1.8.7-p352 :002 > 1.days.ago 
=> Tue, 29 Nov 2011 04:55:21 UTC +00:00 

ruby-1.8.7-p352 :003 > 1.month.ago 
=> Sun, 30 Oct 2011 04:55:54 UTC +00:00 

ruby-1.8.7-p352 :004 > 1.week.from_now 
=> Wed, 07 Dec 2011 04:56:17 UTC +00:00