我正在编写一个方法来返回用户的秒数。我遇到了很多我不理解的错误问题。它如下:
(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不断抛弃有一个未初始化的常量这一事实。什么常数?经过几个小时的研究,我画了一个完整的空白。我该如何解决这个错误?
答案 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日之后将其转换为秒数