6

Rubyで2つのTimeオブジェクトの日付を比較する最良の方法は何ですか?

次のような2つのオブジェクトがあります。

time_1 = Time.new(2012,12,10,10,10)
time_2 = Time.new(2012,12,11,10,10)

この例では、日付比較は false を返す必要があります。

それ以外の場合、同じ日付で時刻が異なる場合は true を返す必要があります。

time_1 = Time.new(2012,12,10,10,10)
time_2 = Time.new(2012,12,10,11,10)

オブジェクトで.to_date機能する を使用しようとしましたが、 ではサポートされていません。DateTimeTime

4

4 に答える 4

9

stdlib の「日付」部分が必要なだけで、日付を比較します。

require "date"
time1.to_date == time2.to_date

ジョブ完了。

于 2013-09-17T09:42:07.410 に答える
3

これが機能することを確認しました:

time_1.strftime("%F") == time_2.strftime("%F")

この%F形式は日付部分のみを返します。

于 2013-09-17T08:16:56.647 に答える
3

たぶん、この方法でテストするだけです:

time_1.year == time_2.year && time_1.yday == time_2.yday

文字列比較よりもリソースの消費が少なくなります。

このメソッドでクラス Time にモンキー パッチを適用すると、読みやすくなります

class Time
  def date_compare(time)
    year == time.year && yday == time_2.yday
  end
end

time_1.date_compare time_2
于 2013-09-17T09:20:26.923 に答える
1

to_date は、ruby 2.0 および ruby​​ 1.9.3 および ruby​​ 1.9.2 http://ruby-doc.org/stdlib-1.9.2/libdoc/date/rdoc/Time.htmlで問題なく動作します。

>> time_1.to_date
=> #<Date: 2012-12-10 ((2456272j,0s,0n),+0s,2299161j)>

しかし、それはruby 1.8.7 http://ruby-doc.org/stdlib-1.8.7/libdoc/time/rdoc/Time.htmlのstdlibにはありません -しかし、時間オブジェクトを作成する方法はそうではありませんそのバージョンで次のいずれかで動作します。

> time_1 = Time.new(2012,12,10,10,10)
ArgumentError: wrong number of arguments (5 for 0)
于 2013-09-17T07:43:06.827 に答える