2016-11-04 65 views
1

我試圖顯示一個帳戶的年齡,通過獲取它的時間,並在當前日期使用它。我如何確定在Ruby on Rails帳戶的日期

這是我到目前爲止有:

def age 
    created = user.created_at 
    today = Date.today 
    age = created - today 
end 

這是在我的模型,我不知道如果我可以從字面上日期帶走的日期,或者如果我的語法是完全錯誤的。任何幫助都將非常感謝!

回答

0

我認爲大部分情況都可以,除非你必須使用同一個班級。

user.created_at是的ActiveSupport :: TimeWithZone

Date.today是一個日期(沒有時間)

如果你Time.now - user.created_at,你應該得到一個可用的數字(以秒)。

0

created_at是一個DateTime,那麼你應該設置today是一個日期時間以及

today = Time.now 

區別將是秒鐘,這樣得到的天數,

(today - created_at)/60/60/24 

你也應該考慮TimeDifference gem有助於計算時間之間的差異。

https://github.com/tmlee/time_difference

0

喜歡的東西...

def age_in_hours(user) 
    origin = user.created_at 
    today = Time.now 
    hours_from = ((today - origin)/3600).round 
end 
1

我認爲,有兩種方法可以解決你的情況: 1)如果你只需要年/天/等,例如,年,你並不需要定義變量:

def age 
    Time.now.year - Time.at(@user.created_at).year #Time.at() I use there, cause, at Default rails set this field like timestamp, if you was changed this, just remove Time.at 
end 

2.如果你想獲得全面的信息,如年,日期和時間,你可以不喜歡它:

def age 
    created_at = Time.at(@user.created_at) 
    today = Time.now 
    { 
    years: (today.year - created_at.year), 
    months: (today.month - created_at.month), 
    days: (today.day - created_at.day), 
    hours: (today.hour - created_at.hour) 
    } 
end 

這裏我用@user因爲它通常使用的方法

def set_user 
    @user = User.find(params[:id] #for example 
end 

您也可以定義方法agedef age(user)和下次使用user.created_at