2016-02-29 26 views
5

今日は2月29日です:私たちのテストが壊れた日。 Time.zone.now - 1.year + 1.year:これらのテストは最後に、このようなコマンドと比較することができ、物事を行うためRails TimeWithZoneとうるう年

当社のテストが失敗しています。そして、と等しく、Time.zone.nowに等しくなります。

どうしてですか?なぜ、ActiveSupportはそのような計算でうるう年を処理できないのですか?この種の問題が起こらないようにするタイムスタンプでは動作しませんか?

+0

あなたは今日、それをテストしている場合は、あなたが悪い運を持っている...今日は唯一の4年ごとに存在する2月の29日です。だから、 'Time.zone.now' +' 1.year'は、2月28日にあなたを連れてくるでしょう。なぜなら、29日は2017年には存在しないからです。「1年.from_now」は、2月28日にも返されます。 – MrYoshiji

+0

はい、私はそれを理解しています。しかし、なぜTime.zone.now + 1.yearは3月1日と同じではないのですか?私の意見では、それはより適切であろう。 – Guilherme

+1

Time.zone.now - 365.days + 365.daysはうまくいくようです... – tobmatth

答えて

0

同じ効果で1の代わりに4年を使用できます。 (注意: - 1.dayそれは今3月1日であるため)

(Time.zone.now - 1.day) - 4.year + 4.year 
=> Mon, 29 Feb 2016 15:12:58 UTC +00:00 

をそれは日付に関係なく、その(下)注目に値するかもしれません。

Time.zone.now 
=> Tue, 01 Mar 2016 15:11:51 UTC +00:00 
Time.zone.now == Time.zone.now - 1.year + 1.year 
=> false 

あなたがbeginning_of_dayを使用しない限り:

(Time.zone.now - 1.day).beginning_of_day == ((Time.zone.now - 1.day) - 4.year + 4.year).beginning_of_day 
=> true 

また、それはあなたが実際にあなたがTime.now - 1.year + 1.yearテストしたいと思うのはなぜ...やろうとしているかによって決まり?

また...

1.year == 365.days 
=> false 
1.year == 365.25.days 
=> true 
+0

'Time.zone.now == Time.zone.now - 1.year + 1.year'は動作しません。 'Time.zone.now'を変数に格納します。 – Guilherme

+0

はい、本当ですが、それは日付のために働いています: 'Date.today == Date.today - 1.year + 1.year' – Jaliso

関連する問題