Rails というか ActiveSupport の Time#since で混乱しました。
これまでに混乱した since の使われ方一覧はこちら。
time.since(2.days) time.since(-2.days) 2.days.since
ぜ、全部わけわかんねぇ……。
とりあえず -2.days
は疲れてた故の過ちだったぽいので良いです。
しかしやはり、time.since(2.days)
も 2.days.since
もぶっちゃけよくわかりません。
ActiveSupport の Time 拡張は、基本的に英語力に自信がなくても直感的に読める場合が多かったのですが、正直この since の使い方はよくわからなかったので調べました。
since(seconds)
Returns a new Time representing the time a number of seconds since the instance time
Also aliased as: in
要するに、time.since(2.days)
はこの説明通りに読むと、2 days since the time となるようです。
完全に場所が入れ替わってる……これはわかりにくいはずですね。
これの alias は Time#in らしいので、それを使えば time.in(2.days)
となりスッキリ書けます。超わかりやすい。
で、次は 2.days.since
のターン。これまた全然わからん。
というわけで、調べます。
since(time = ::Time.now)
Reads best with argument: 10.minutes.since(time)
This method is also aliased as from_now
引数ついてると読みやすい的なことが書いてあるとおり、たしかに引数があるならわかりやすそうです。
ただ、引数がない場合は alias の from_now を使ったほうが遥かに意味が明瞭ですね。
まとめると、
time.since(2.days) # => time.in(2.days) or 2.days.since(time) 2.days.since # => 2.days.from_now
ということですね。
こっちのほうがわかりやすい!!