Lee*_*Lee 1 ruby ruby-on-rails date
如果我有两个日期,即.
checkin = Date.parse('params[:checkin])
checkout = Date.parse('params[:checkout])
Run Code Online (Sandbox Code Playgroud)
如何查看这两个日期之间是否有星期一?
有什么建议?
(checkin..checkout).any?(&:monday?)
Run Code Online (Sandbox Code Playgroud)
另外,我不确定Range#是否?是否实例化数组.如果确实如此,最好添加额外的检查以避免高内存消耗(请参阅下面的更新):
checkout - checkin > 7 || (checkin..checkout).any?(&:monday?)
Run Code Online (Sandbox Code Playgroud)
并确保签入<= checkout.
UPD:我刚刚经过双重检查.没有必要检查是否checkout - checkin大于某些东西.Range#any?足够聪明并且不在内部创建数组(至少在ruby 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
493 次 |
| 最近记录: |