2016-05-12 3 views
1

私はmysql2 gemを使用し、apache2/passengerの下で動作するRubyスクリプトを書いています。mysql2 gemを使ったRubyスクリプト - 日付をDate.newと比較する

このスクリプトは、mySqlクエリ結果を繰り返し処理し、データベースの日付を今日と比較し、経過日数を取得します。問題は、Date.newからデータベース日付を引いた結果の文字列が-2457521/1のような文字列であることです。正解は0にする必要があります。

Dateを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

私はあなたの問題は、私はIRBでDate.newを実行したときに、それは次返しDate.newを使用しているという事実だと思います。いくつかの年の1月1日のように見える

#<Date: -4712-01-01 ((0j,0s,0n),+0s,2299161j)>

代わりにDate.todayを使用すると、現在の日付が返されます。

irbでこれを実行すると、これが表示されます。#<Date: 2016-05-12 ((2457521j,0s,0n),+0s,2299161j)>通知2016-05-12 vs -4712-01-01これはあなたの結果が否定的な理由です。この答えは助け

希望:)

+0

近いがDate.todayだ - last_event戻っ0/1 – markhorrocks

+0

あなたは 'last_event.class'を実行した結果であるものを私に伝えることができますしてください? 'Date.parse("#{last_event} ")をコメントアウトしたことに気づきました'おそらくlast_eventはDate.todayからそれを減算するときにDateクラスではありません –

+0

私は以前にクラスをチェックし、両方の日付。とにかく、(Date.today - last_event).to_iは私に正しい結果を与えるので、あなたの答えを正しく記入します。 – markhorrocks