18

私はルビーを見ているだけで、日付/時刻のことで遊んでいました。

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は、うるう年があるかどうかを、それらの年を合計するとわかりません。私はいくつかのグーグルの時間/日付のチュートリアルを経験しましたが、2つの日付を減算して、年、月、日などの形式で返す簡単な方法を見つけられませんでした。ルビーにはこの種のもののためのアドオンか何かが組み込まれていると思います。誰かがそれが何であるか教えてもらえますか?(また、将来の参考のために、この種のことに対する答えを見つける方法について何かアドバイスはありますか?)

ありがとう。

4

1 に答える 1

36

あなたはDate代わりに欲しいTime

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

今日と2000年1月1日の年数の違いがわかります。おそらく改善される可能性があります。私は年間平均日数(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では機能しません。

もちろん、2つの日付の間の年数を決定する最も簡単な方法は、数値を引くことです。

2010 - 2000 # => 10
于 2010-11-14T10:35:53.203 に答える