使用mysql2 gem的Ruby脚本 - 将db date与Date.new进行比较

时间:2016-05-12 09:57:33

标签: mysql ruby ubuntu

我正在编写一个使用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

1 个答案:

答案 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时,我得到了这个,这也是你的结果为负的原因。

希望这个答案有所帮助:)