普段は to_i
してエポック秒比較しているのに、Time同士でもまぁいっかーとか思ったら降り掛かった厄災系メモ
環境
rails (5.2.0)
事象
end_of_** (end_of_dayやend_of_month)を使うと、対象の切り替わる手前の時刻を引き出してくれるが、その内容は小数点以下にも設定されている
例
target_time = "2018/12/10 10:00:00".in_time_zone # => Mon, 10 Dec 2018 10:00:00 JST +09:00 # 当該月の終わりを割り出す target_time.end_of_month # => Mon, 31 Dec 2018 23:59:59 JST +09:00 # 小数点以下も見る target_time.end_of_month.iso8601(3) # => "2018-12-31T23:59:59.999+09:00"
不幸な事が起こる例
target_time = "2018/12/10 10:00:00".in_time_zone # => Mon, 10 Dec 2018 10:00:00 JST +09:00 # 対象時間の月末を割り出す target_time.end_of_month # => Mon, 31 Dec 2018 23:59:59 JST +09:00 # 年の終わりの時間を設定する year_limit = "2018/12/31 23:59:59".in_time_zone # => Mon, 31 Dec 2018 23:59:59 JST +09:00 # 比較したら同じになりそうだがならない target_time.end_of_month == year_limit => false # 小数点以下に差異がある "#{target_time.end_of_month.iso8601(3)} == #{year_limit.iso8601(3)}" # => "2018-12-31T23:59:59.999+09:00 == 2018-12-31T23:59:59.000+09:00"