2013-12-13 3 views
1

У меня есть следующий выбор:Рассчитать количество дней в диапазоне времени?

range = Time.now-1.month..Time.now 

Как рассчитать количество дней в этом диапазоне?

Я бегу Ruby 2.0.0.

+0

ли Rails код? –

+0

Errr, я думаю. Не осознавали, что это были специфические для Rails методы. – Shpigford

+0

'1.month' я думаю, что код rails –

ответ

2
range = Time.now .. Time.now-1.month 
=> 2013-12-13 15:35:57 -0500..2013-11-13 15:35:57 -0500 
((range.first - range.last)/1.day).ceil 
=> 30 
+0

Но не будет '1.month.ago' быть * как минимум * 30 дней? По крайней мере, за все месяцы, кроме февраля? – Shpigford

+0

@Spigford, yep, 'floor' округленный 29.9999 ... до 29. Изменил его на' ceil', который округляется до 30. – Mori

0

#<< метод Дата вычитает месяц (# >> добавляет один). Вычитание дат приводит к дням.

require 'date' 

p (Date.today - (Date.today << 1)).to_i #=> 30 
#so: 
range = Time.now-1.month..Time.now 
p p (range.last.to_date - range.first.to_date).to_i #=>30 
0

1.monthwill always be 30 days, поэтому ваш диапазон всегда будет диапазон 30 дней. Если вы хотите узнать количество дней в этом месяце, так как вы уже ActiveSupport доступны, вы можете просто использовать Time#days_in_month:

Time.days_in_month(Time.now.month, Time.now.year) 
# => 31 

Time.days_in_month(Time.now.month - 1, Time.now.year) 
# => 30 
+0

Причина для downvote? ActiveSupport буквально определяет Integer # month как 30-дневную продолжительность. –

Смежные вопросы