2011-11-29 147 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