如何快速将日期转换为秒以便在Ruby中进行比较

时间:2014-03-09 03:42:36

标签: ruby-on-rails ruby date datetime

我正在编写一个方法来返回用户的秒数。我遇到了很多我不理解的错误问题。它如下:

  

(eval):1:(eval):1:未初始化的常量Date(NameError)

我已经创建了一个类Age < Date,以便我也可以使用Date模块中的所有方法。我一直遇到的问题是使用我的in_seconds方法,如下所示:

def in_seconds
    current = Time.now
    bday = Date.new(year, month, day) # this is the birthday of the user
    age = (current - bday).to_s
    return "You are #{age} years old."
end

我正在考虑修改initialize方法以包含参数(YYYY, MM, DD),以便我可以为每个用户保留一个正在运行的生日日期,如下所示:

John = Age.new(1985, 04, 27) 
# sets @age to 910,993,128 seconds

Angela = Age.new(1991, 03, 15)
# sets @age to 725,405,928 seconds

我最大的问题是我似乎无法摆脱那种错误。 Ruby不断抛弃有一个未初始化的常量这一事实。什么常数?经过几个小时的研究,我画了一个完整的空白。我该如何解决这个错误?

3 个答案:

答案 0 :(得分:0)

我不确定你能否从一个时间中减去一个日期。我建议您使用Time.new获取bday变量。这也将摆脱你的错误 - @MarkThomas是否需要该库是正确的。

目前尚不清楚为什么Age需要成为Date(或者Time)的子类来做你想做的事情。如果将此方法添加到任何对象,它将计算日期与现在之间的时间(以秒为单位):

def in_seconds(year, month, day)
  back_then = Time.new(year, month, day)
  seconds_since_then = Time.now - back_then
end

答案 1 :(得分:0)

由于Steve Rowley建议我无法将Date对象与Time对象进行比较,我找到了解决问题的方法。我决定只使用Time对象将年龄转换为整数,如下所示:

require 'time'

class Age 

    def initialize(year, month, day)
    # the parameters are assumed to be integers
        @age = Time.parse("#{year}-#{month}-#{day}").to_i
    end

    def in_sec
        return Time.now.to_i - @age
    end

end

到目前为止,我没有任何问题。似乎最大的问题来自于使用Date模块。

答案 2 :(得分:0)

UMM

date.to_time.to_i

在1970年1月1日之后将其转换为秒数