我正在编写一个使用 mysql2 gem 并在 apache2/passenger 下运行的 Ruby 脚本。它不使用 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
最佳答案
我认为你的问题是当我运行 Date.new
时你正在使用 Date.new在 irb 中,它返回以下内容:
#<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 与 -4712-01-01 这也是您的结果是否定的原因。
希望这个回答对您有所帮助:)
关于mysql - 带有 mysql2 gem 的 Ruby 脚本 - 将数据库日期与 Date.new 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37183479/