这样判断当前时间在某个区间里貌似不行,各位有木有好的办法啊?
a = 1.days.ago..1.days.from_now
a.include?(Time.now)
Time.now.zone # 查看时区
Time.now.to_s # 2013-11-30 16:41:27 +0800
Time.now.in_time_zone('Tokyo') # 2013-11-30 17:41:54 +0900
ActiveSupport::TimeZone.zones_map.map { |k, v| k } # Rails 支持的时区
ActiveSupport::TimeZone[-8] # 获取 -8:00 时区.
希望可以帮到你。
难道不是这么判断?
irb(main):001:0> a = Time.now
=> 2013-11-30 21:56:45 +0800
irb(main):002:0> b = 1.days.from_now
=> Sun, 01 Dec 2013 13:56:53 UTC +00:00
irb(main):003:0> c = 1.hours.from_now
=> Sat, 30 Nov 2013 14:57:02 UTC +00:00
irb(main):004:0> c.between?(a, b)
=> true
首先你要知道你这个 time range 是很大的范围,最好改成 Date,另外判断是否在 range 里面可以用 ===
a=(1.day.ago.to_date..1.day.from_now.to_date)
a === Time.now.to_date # => true
#6 楼 @yangxing_star
因为 ruby 1.9.x 以上版本不支持迭代 Time 类型,所以不能直接在 Time Range 上使用===
方法,但可以使用 cover?方法来判断是否在两个时间之间,如:
(Time.now..Time.now+1).cover? Time.now # => true
当然,如果非要使用===
方法,就要把 Time 类型转换为支持迭代的其他类型,如 Date 或 Fixnum,如:
(Time.now.to_date..(Time.now+1).to_date) === Time.now.to_date # => true
或
(Time.now.to_i..Time.now.to_i+1) === Time.now.to_i # => true
不过 ruby 1.8.x 是支持在 Time 类型上使用===
方法的。
同 3 楼,可以使用 between?
http://ruby-doc.org/core-2.0.0/Comparable.html#method-i-between-3F