Tanaka on Rails

行動・努力・俯瞰

Rail 6 - 時間ロジック

Railsにおける時間のロジック

Railsで時間を計測する機能を実装中なのですが、その中で学んだことを書いていきます。

フロントエンドはVue.jsでの実装をしており、以下のサイトが非常に参考になりました。

note.com

qiita.com

問題はRailsの方。
スタートした時間をstart_at、ストップした時間をend_atといったカラムを使って保存し、その差によってかかった時間をtake_timeのようなカラムに保存して時間を計測するロジックを考えていました。

ただそれで問題となるのはカラムの型。
start_atend_atはDatetime型で問題なし。

qiita.com

www.fundely.co.jp

take_timeはどうするか?
初めはTime型を使用していたのですが、保存されるときに「協定世界時(UTC)の1970年1月1日午前0時」から起算されるので、日本で登録すると「1970年1月1日午前9時」に登録されるようでした。
これだと単純に何分とか何秒とかの計算で使用するならいいかもしれないですが、何時間とかともなると午前9時というのがめちゃくちゃ邪魔になります笑

それに加えてend_atからstart_atを引いた差は1.423...といった小数点まで含む秒数として計算されるので、これを保存するという意味でもTimeだと変形しないといけないので不便だと思いました。

そこで単純に数値として小数点まで保存できるFloat型を暫定で採用しようと思っています。
これを使えば計測時間をVue側で表示をする場合は計算をしないといけませんが、単純にRails側で保存するという点ではスッキリします。

現状ではこの方法で実装していこうと思っていますが、まだ開発中なのでもっといい方法があれば改善していこうと思っています!!