Вычитание даты с рубином
-
09-10-2019 - |
Вопрос
Я просто посмотрю на Руби и играл с вещью даты / времени.
irb(main):001:0> jamis_DOB = Time.mktime(2003, 10, 22, 06, 59)
=> Wed Oct 22 06:59:00 +0300 2003
irb(main):002:0> age = Time.now - jamis_DOB
=> 222934108.172989
irb(main):005:0> age_in_years = (((age / 3600) / 24) / 365).to_i
=> 7
Итак, мой пример не так хорош, как Age_in_years не будет знать, есть ли прыжок лет, когда эти годы складываются. Я проходил через несколько гугул / учебных пособий по времени / дате и не нашел простого способа просто вычесть два дата и вернуться через несколько лет, месяцев, дней и т. Д. Формат. Я предполагаю, что Ruby есть дополнение или что-то встроенное для такого рода вещи. Может кто-нибудь сказать мне, что это такое? (Кроме того, любой совет Как найти ответы на этот тип вещи для дальнейшего использования?)
Спасибо.
Решение
require 'date'
now = Date.today
before = Date.civil(2000, 1, 1)
difference_in_days = (now - before).to_i
(difference_in_days/365.25).to_i
Даст вам разницу в течение многих лет и 1 января 2000 года. Возможно, он может быть улучшен, я только что использовал среднее количество дней в год (365,25), что даст вам правильный ответ, за исключением случаев, за исключением случаев крайности.
Вы также можете сделать что-то вроде этого:
require 'date'
years = 0
d = Date.civil(2000, 1, 1)
loop do
d = d.next_year
break if Date.today < d
years += 1
end
Но Date#next_year
Был введен в Ruby 1.9, поэтому он не будет работать в 1.8.7.
Конечно, самый простой способ определить количество лет между двумя датами просто вычитает цифры:
2010 - 2000 # => 10