2つの日付(Date
オブジェクト)があります。私は、その差が正確にXヶ月の倍数であるかどうかをチェックする必要があります(月と日の最後を考慮)。2つの日付の違いがXの月数の倍数であることを確認する方法
簡潔にするため、この質問ではXが4になるとします。
私が達成したい最も単純なロジックは、次の点です(モジュロは整数でしか動作しないように見えるため、FOUR_MONTHSは機能しません)。だから、私は次のことを模倣する任意の方法(私は単に見逃しているかもしれないこと)がありますかどうかを知りたいのです:
(Date.parse('2017-01-15') - Date.parse('2016-09-15')) % (FOUR_MONTHS) == 0
(Date.parse('2017-01-15') - Date.parse('2016-09-14')) % (FOUR_MONTHS) != 0
(Date.parse('2017-01-15') - Date.parse('2016-05-15')) % (FOUR_MONTHS) == 0
(Date.parse('2017-01-31') - Date.parse('2016-09-30')) % (FOUR_MONTHS) == 0
(Date.parse('2016-11-30') - Date.parse('2016-07-31')) % (FOUR_MONTHS) == 0
(Date.parse('2016-11-30') - Date.parse('2016-07-30')) % (FOUR_MONTHS) == 0
は、現時点では、私は各FOUR_MONTHSをループと考えることができますが、私はそれを考えています効率的ではなく、より単純な方法があるかもしれないし、まったく単純なRubyメソッドを見逃してしまったかもしれません。
P.S. ActiveSupport::TimeZone
は実装上の違いがある可能性があるので、私はこの質問にルビー・オン・レールを付けてタグ付けしています。
この質問は、注意が必要ですあなたはactivesupportのの
months_ago
またはmonths_since
メソッドを使用することができます。回答者が何かをコーディングすることを期待する前に、試したことを示す必要があります。 –@EricDuminil、あなたは正しいです。私は数分で私の答えを更新して、ループしているので非効率的だと思う。 –
合法であっても、downvotesのために今stackoverflowを嫌いにし始めている理由の1つ。私は意図的にサンプル回答を書いていませんでした。効率の悪い方が良い方法があると確信しています。みんなもっと気にしてください。 –