7

dateという列を持つモデルがありますbirthday

ユーザーの次の誕生日までの日数を計算するにはどうすればよいですか?

4

4 に答える 4

15

これが簡単な方法です。今年すでに通過しているケース(およびまだ通過していないケース)を必ずキャッチする必要があります。

class User < ActiveRecord::Base
  attr_accessible :birthday

  def days_until_birthday
    bday = Date.new(Date.today.year, birthday.month, birthday.day)
    bday += 1.year if Date.today >= bday
    (bday - Date.today).to_i
  end
end

そしてそれを証明するために!(私が追加したのは、今日(2012-10-16)の時点で計算を正確に保つためのtimecopgemだけです。

require 'test_helper'

class UserTest < ActiveSupport::TestCase

  setup do
    Timecop.travel("2012-10-16".to_date)
  end

  teardown do 
    Timecop.return
  end

  test "already passed" do
    user = User.new birthday: "1978-08-24"
    assert_equal 313, user.days_until_birthday
  end

  test "coming soon" do
    user = User.new birthday: "1978-10-31"
    assert_equal 16, user.days_until_birthday
  end
end
于 2012-10-17T03:00:20.033 に答える
2

これを試して

require 'date'

def days_to_next_bday(bday)
  d = Date.parse(bday)

  next_year = Date.today.year + 1
  next_bday = "#{d.day}-#{d.month}-#{next_year}"

 (Date.parse(next_bday) - Date.today).to_i
end

puts days_to_next_bday("26-3-1985")
于 2012-10-17T05:34:42.967 に答える
0

これをスワイプする:

require 'date'
bday = Date.new(1973,10,8)  // substitute your records date here.
this_year  = Date.new(Date.today.year,   bday.month, bday.day )
if this_year > Date.today 
  puts this_year - Date.today
else
   puts Date.new(Date.today.year + 1,   bday.month, bday.day ) - Date.today
end

Railsがそれをはるかに簡単にする何かをあなたに与えるかどうかはわかりません。

于 2012-10-17T03:03:19.887 に答える