如果我有兩個日期即。Ruby日期範圍包括特定日期
checkin = Date.parse('params[:checkin])
checkout = Date.parse('params[:checkout])
如何檢查這兩個日期之間是否有星期一?
有什麼建議嗎?
如果我有兩個日期即。Ruby日期範圍包括特定日期
checkin = Date.parse('params[:checkin])
checkout = Date.parse('params[:checkout])
如何檢查這兩個日期之間是否有星期一?
有什麼建議嗎?
(checkin..checkout).any?(&:monday?)
此外,我不知道如果範圍#任何?實例化一個數組或不。 以防萬一,如果確實如此,這將是最好添加額外的檢查,以避免佔用大量內存(見下文更新):
checkout - checkin > 7 || (checkin..checkout).any?(&:monday?)
而且還確保籤是< =結賬。
UPD:我剛剛仔細檢查過。沒有必要檢查是否checkout - checkin
大於某物。 Range#any?
是足夠聰明,不會在內部創建一個數組(至少在紅寶石1.9.3):
1.9.3p327 :004 > checkin, checkout = Date.new, Date.new + 9000.years
=> [Mon, 01 Jan -4712, Sun, 01 Jan 4288]
1.9.3p327 :005 > `ps -o vsize= #{$$}`.strip.to_i
=> 3161660 # memory usage of the current process
1.9.3p327 :006 > (checkin..checkout).any?(&:monday?)
=> true
1.9.3p327 :007 > `ps -o vsize= #{$$}`.strip.to_i
=> 3161660 # memory usage of the current process stays the same
1.9.3p327 :008 > (checkin..checkout).to_a.any?(&:monday?) # force .to_a
=> true
1.9.3p327 :009 > `ps -o vsize= #{$$}`.strip.to_i
=> 3421680 # memory usage increases and also the previous line was very slow
這個答案是awsum, (checkin..checkout).any?(&:monday?)
,
,但你也可以做如下,
(checkin..checkout).cover?(Date.today) # you can give date to it.
僅供參考,@DNNX和Aleks,我們必須將Date作爲參數來覆蓋,因爲我們將它應用於DateRange。
甜。 TY非常多 – Lee 2013-03-20 14:07:37
+1對你來說不過 – Aleks 2013-03-20 14:12:17
你可以改進你的第二條語句到'checkout - checkin> 5'或'checkout - checkin> = 6'。 – 2013-03-20 14:51:20