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



我正在编写一个返回用户年龄的方法。我有很多问题与一个错误,我不明白。内容如下:

(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不断抛出一个事实,即存在一个未初始化的常量。常数是什么?经过几个小时的研究,我完全没有头绪。我怎样才能弥补这个错误呢?

我不确定您是否可以从时间中减去日期。我建议使用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

我已经找到了解决这个问题的方法,这要感谢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模块。

umm

date.to_time.to_i

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

相关内容

  • 没有找到相关文章

最新更新