У меня есть два объекта DateTime Ruby on Rails. Как узнать количество месяцев между ними? (Имея в виду, что они могут принадлежать разным годам)
ruby-on-rails
ruby
date
ruby-on-rails-3.1
волшебник-феникс
источник
источник
Ответы:
подробнее на http://www.ruby-forum.com/topic/72120
источник
(12 * (date2.year - date1.year) + date2.month - date1.month).abs if date1 && date2
Более точный ответ - это дни на расстоянии.
Например, если вы считаете, что расстояние в месяц от
28/4/2000
и1/5/2000
,0
а не1
, то вы можете использовать:источник
Попробуйте
источник
irb>Time.at("2014-10-01".to_time - "2014-12-01".to_time).month => 10
(Я отказываюсь от форматирования ... не могу понять)Date.new(2014, 10, 31), Date.new(1997, 4, 30)
я получил 213 вместо 210 месяцев. Причина в том, что1.month.seconds
количество секунд в 30 днях, а не среднее количество секунд в месяц. Голосование против, чтобы другие остались без ошибок.Вы можете перефразировать вопрос, как «сколько первых дней проходит между началом месяцев дат», а затем использовать преобразования данных в функциональном стиле:
источник
Предполагая, что оба являются датами:
((date2 - date1).to_f / 365 * 12).round
просто.источник
((date2 - date1).to_f / 60 / 60 / 24 / 365 * 12).round
источник
Другое решение, которое я нашел (построенное на уже опубликованном здесь решении), предназначено для тех случаев, когда вы хотите, чтобы результат включал доли месяца. Например расстояние
1.2 months
.источник
источник
Мне нужно было точное количество месяцев (включая десятичные числа) между двумя датами, и я написал для этого следующий метод.
Если сравнивать, скажем, 26 сентября с 26 сентября (в тот же день), я рассчитываю это как 1 день. Если вам это не нужно, вы можете удалить первую строку в методе:
period_end = period_end + 1.day
Он соответствует следующим спецификациям:
источник
Вот вариант перебора:
date2
всегда должно быть больше, чемdate1
источник
Вот еще один способ. Это поможет рассчитать количество полных месяцев между двумя датами.
источник
Решение для любых случаев
источник