Ruby の日付/時刻ヘルパーは便利ですが、矛盾が見つかりました。12.months は 1.year と等しくないようです。1.month を確認すると、30.days に等しいことがわかります。もちろん、12 * 30.days = 360.days であり、実際の 1 年の長さより 5.25 日短いのです。
クライアントが指定した、許可された月数に基づいて Web サイトの特定のコンポーネントへのアクセスを設定したときに、これに遭遇しました。テストを実行すると、36.month の期間が数週間早く期限切れになることがわかりました。解決策は次のようなものでした:
def months_to_seconds(number_of_months)
( (number_of_months.to_f / 12) * 1.year).to_i.seconds
end
これは、number_of_months で表される年の端数の秒数を返します。
1.year は秒単位で 365.25 日と等しいのに、1.month が 30 日ではなく 1/12 の秒を返さなかったのはなぜだと思いますか?
誰もこれに遭遇したことがありますか?誰かがより良い解決策を持っていますか?