我如何才能获得由Time对象组成的范围的大小或数量?
可以实现与我的伪 Ruby 代码相同的结果,但它不起作用:
((Time.now.end_of_day - 31.days)..(Time.now.end_of_day - 1.day)).size == 30
Run Code Online (Sandbox Code Playgroud)
目前执行上述操作会出现错误:
NoMethodError:2012-05-18 23:59:59 -0400..2012-06-17 23:59:59 -0400:Range 未定义方法“size”
并尝试将其转换为数组(range).to_a:
无法从时间迭代
有趣,刚刚尝试做
((Date.today.end_of_day - 31.days)..(Date.today.end_of_day - 1.day)).count
Users/.../gems/ruby/1.9.1/gems/activesupport-3.0.15/lib/active_support/time_with_zone.rb:322:警告:Time#succ 已过时;使用时间+1
然而
((Date.today - 31.days)..(Date.today - 1.day)).count == 31
我愿意满足于此吗?
还((Date.today - 31.days)..(Date.yesterday)).count == 31
另一方面,根据 Mu 的提示,我们可以这样做:
(((Time.now.end_of_day - 31.days)..(Time.now.end_of_day - 1.day)).first.to_date..((Time.now.end_of_day - 31.days)..(Time.now.end_of_day - 1.day)).last.to_date).count == 31
没有像Range#size“尝试”这样的方法Range#count(如安德鲁·马歇尔建议的那样),尽管它仍然不适用于一系列Time对象。
如果要执行天数计算,最好使用Date对象,或者通过直接实例化它们(Date.today - 31例如),或者通过调用#to_date对象Time。
Date对象也可以用于迭代:
((Date.today - 2)..(Date.today)).to_a
=> [#<Date: 2012-06-17 ((2456096j,0s,0n),+0s,2299161j)>,
#<Date: 2012-06-18 ((2456097j,0s,0n),+0s,2299161j)>,
#<Date: 2012-06-19 ((2456098j,0s,0n),+0s,2299161j)>]
((Date.today - 2)..(Date.today)).map(&:to_s)
=> ["2012-06-17", "2012-06-18", "2012-06-19"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3391 次 |
| 最近记录: |