我正在编写一个使用mysql2 gem的Ruby脚本,并在apache2 / passenger下运行。它不使用rails。
脚本遍历mySql查询结果并将数据库日期与今天进行比较,以获得以天为单位的已用时间。问题是从Date.new中减去数据库日期的结果字符串是-2457521/1之类的字符串。正确答案应为0。
我尝试使用Date.parse()和Date.strptime()将日期转换为Ruby日期,但得到相同的结果。如何减去这些日期以获得它们之间的天数?
以下是我脚本中的编辑代码摘录。
require 'mysql2'
class Uptime
def call(env)
results = con.query("SELECT * FROM Uptimes ORDER BY Up DESC LIMIT 10")
flag = 0
results.each(symbolize_keys: true) do |row|
if flag == 0
last_event = row[:Up] # => 2016-05-12
flag = 1
end
end
# last_event = Date.parse("#{last_event}")
# last_event = Date.strptime("#{last_event}" "%Y-%m-%d")
days = Date.new - last_event # => -2457521/1
[200, {"Content-Type" => "text/html"}, [html]]
end
end
答案 0 :(得分:1)
我认为您的问题是,当我在irb中运行Date.new
时,您正在使用Date.new,它会返回以下内容:
#<Date: -4712-01-01 ((0j,0s,0n),+0s,2299161j)>
看起来像某一年的1月1日。
如果您使用Date.today
代替将返回当前日期。
当我在irb #<Date: 2016-05-12 ((2457521j,0s,0n),+0s,2299161j)>
通知2016-05-12 vs -4712-01-01时,我得到了这个,这也是你的结果为负的原因。
希望这个答案有所帮助:)