2つの日付がある場合。
checkin = Date.parse('params[:checkin])
checkout = Date.parse('params[:checkout])
これら 2 つの日付の間に月曜日があるかどうかを確認するにはどうすればよいですか?
助言がありますか?
2つの日付がある場合。
checkin = Date.parse('params[:checkin])
checkout = Date.parse('params[:checkout])
これら 2 つの日付の間に月曜日があるかどうかを確認するにはどうすればよいですか?
助言がありますか?
(checkin..checkout).any?(&:monday?)
また、Range#anyかどうかはわかりませんか?配列をインスタンス化するかどうか。念のため、メモリの消費量が多くなるのを避けるために、チェックを追加することをお勧めします(以下の更新を参照)。
checkout - checkin > 7 || (checkin..checkout).any?(&:monday?)
また、チェックインが<=チェックアウトであることを確認してください。
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
この答えは awsum です
(checkin..checkout).any?(&:monday?)
。
ただし、次のようにすることもできます。
(checkin..checkout).cover?(Date.today) # you can give date to it.
参考までに、@DNNX と Aleks のために、DateRange に適用しているので、カバーするパラメーターとして Date を使用する必要があります。