Rails 3 または Ruby で期間を時間:分:秒 (または同様の形式) に変換する 質問する

Rails 3 または Ruby で期間を時間:分:秒 (または同様の形式) に変換する 質問する

これを行うための簡単な/組み込みの方法があるような気がしますが、見つけることができません。

整数で期間(秒単位)があり、それをわかりやすい形式で表示したいと考えています。

たとえば、3600 は「01:00:00」または「1 時間」などと表示されます。

で実行できますtime_ago_in_words(Time.zone.now+3600)が、ちょっとハックのように感じます。この値をフォーマットするためだけに現在の時刻を加算/減算する理由はありません。duration_in_words()または何かありますか?

ありがとう

ベストアンサー1

まとめ:

仮定してtotal_seconds = 3600

オプション1:

distance_of_time_in_words(total_seconds) #=> "about 1 hour"

オプション2:

Time.at(total_seconds).utc.strftime("%H:%M:%S") #=> "01:00:00"

注意: オーバーフローします。例えば、次のようtotal_seconds = 25.hours.to_iに返されます。"01:00:00"

オプション3:

seconds = total_seconds % 60
minutes = (total_seconds / 60) % 60
hours = total_seconds / (60 * 60)

format("%02d:%02d:%02d", hours, minutes, seconds) #=> "01:00:00"

オプション4:

ActiveSupport::Duration.build(total_seconds).inspect #=> "1 hour"

# OR

parts = ActiveSupport::Duration.build(total_seconds).parts
"%02d:%02d:%02d" % [parts.fetch(:hours, 0),
                    parts.fetch(:minutes, 0),
                    parts.fetch(:seconds, 0)] #=> "01:00:00"

おすすめ記事