使用 Ruby 的 Range#include?
方法处理日期时间范围时会出现异常:
> (Time.zone.now.beginning_of_day..Time.zone.now.end_of_day).include?(Time.zone.now)
TypeError: can't iterate from ActiveSupport::TimeWithZone
使用Rails的Range#overlaps?
是有效的:
> (Time.zone.now.beginning_of_day..Time.zone.now.end_of_day).overlaps?(Time.zone.now..Time.zone.now)
=> true
我不喜欢使用单元素范围来检查是否包含,需要使用overlaps?
。在Rails中,是否有一种方法可以使用include?
来处理日期时间范围?
ActiveSupport::TimeWithZone
类型,因此需要使用.zone
。您会注意到,如果没有时区,上述代码仍会抛出以下异常:TypeError: can't iterate from Time
。 - sirdharma