質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

4106閲覧

経過時間を取得したい

pecchan

総合スコア592

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/05/12 01:15

編集2021/05/12 01:47

rails6.1.0になります。

初歩的な質問で恐れ入ります。

targetモデルに最終更新日があります。

現在時刻 - 最新更新日
として経過時間を計算し、
railsのt.timestamps(Datetime型)で取得したいです。

最終更新日は、Time.nowで更新してます。

下のようなヘルパーを作ったのですが、

ruby

1 def last_login_time(target) 2 last_access_time = target.updated_at 3 return Time.now- last_access_time 4 end

こうしますと、
68386.7503897
というような
秒数?のようなものが返ってきており
ここからどうすれば良いのか分からずにいます。
※そもそも計算の前に変換が必要だったのでしょうか?

試しにrailsコンソールで確認してみました。

まずtargetモデルのupdated_atを確認。

Wed, 12 May 2021 09:48:20.474127000 JST +09:00

となりました。

ここで現在時刻からこの時刻を引いてみました。
するとエラーになりました。
Wedの後に','があるからのようです。

[2] pry(main)> Time.now- Wed, 12 May 2021 09:48:20.474127000 JST +09:00 SyntaxError: unexpected ',', expecting end-of-input Time.current - Wed, 12 May 2021 09:48:20.4741270...

経過時間を取得するには、どのようにするのでしょうか?
先輩方教えていただけないでしょうか?

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Time同士を引き算すると、差が秒を単位に得られます。
DateTime同士を引き算すると、差が日を単位に得られます。

Time.now- Wed, 12 May 2021 09:48:20.474127000 JST +09:00

は、Rubyの構文として意味をなさないので、カンマがあるないレベルの話では無いです。
せめて、Time.now- "Wed, 12 May 2021 09:48:20.474127000 JST +09:00"と書きましょう。
もちろんこれも間違いで、正解は、
Time.now- Time.parse("Wed, 12 May 2021 09:48:20.474127000 JST +09:00")
です。Time.parseで「日時を表す文字列」をTimeオブジェクトに変換します。

投稿2021/05/12 02:12

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pecchan

2021/05/12 03:49

大変参考になりました。 有難う御座います。
guest

0

ベストアンサー

秒数?のようなものが返ってきており

秒数であっています。

そもそも、RubyおよびRailsには「長さとしての時間」(not 時刻、日時)を表す型が現状存在しません。
Datetime型もある日時でしかありません。

秒数以降の変換などについては自力で行う必要があります。

まぁ、大抵の場合はtime_ago_in_wordsヘルパー関数でまかなえると思います。
余談として、time_ago_in_words実装部分でRailsが時間のパースを自力で行っている事が確認できるかと思います。

投稿2021/05/12 01:59

asm

総合スコア15149

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pecchan

2021/05/12 02:08

親切なアドバイス有難う御座います! 教えていただいたヘルパーを参照し挑戦してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問