【问题标题】:Ruby script with mysql2 gem - compare db date to Date.new带有 mysql2 gem 的 Ruby 脚本 - 将 db 日期与 Date.new 进行比较
【发布时间】:2016-05-12 09:57:32
【问题描述】:

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

【问题讨论】:

    标签: mysql ruby ubuntu


    【解决方案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)> notice 2016-05-12 vs -4712-01-01 中运行它时,我得到了这个,这也是您的结果是否定的原因。

    希望这个答案有帮助:)

    【讨论】:

    • 很接近,但 Date.today - last_event 返回 0/1
    • 请告诉我运行last_event.class的结果是什么?我注意到你已经注释掉了Date.parse("#{last_event}"),当你从Date.today中减去它时,last_event 可能不属于 Date 类。
    • 我之前检查过class,发现它们都是Date。无论如何, (Date.today - last_event).to_i 给了我正确的结果,所以我会标记你的答案是正确的,谢谢。
    • 很高兴我能帮上忙 :) 感谢您接受我的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多