127 votes

Convertir la durée en heures:minutes:secondes (ou similaire) en Rails 3 ou Ruby

J'ai le sentiment qu'il y est une simple/built-dans la façon de le faire, mais je ne le trouve pas.

J'ai une durée (en secondes) en un entier et je veux l'afficher dans un format plus convivial.

par exemple, 3600 sera affiché comme "01:00:00" ou "1 heure", ou quelque chose.

Je peux le faire avec time_ago_in_words(Time.zone.now+3600) mais qui se sent comme un peu un hack, il n'y a pas de raison d'ajouter/soustraire de l'heure actuelle juste pour le format de cette valeur. Est-il un duration_in_words() ou quelque chose?

Merci

211voto

Lev Lukomsky Points 1079

En résumé:

en supposant que l' total_seconds = 3600

Option 1:

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

Option 2:

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

Option 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"

utilisation Option1 si vous voulez des mots, Option2 si vous voulez H:M:S format, Option3 si vous voulez H:M:S format et il y a peut être plus de 24 heures

94voto

allan Points 589

Voir: http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html

distance_of_time_in_words(3600)
 => "about 1 hour"

27voto

Cristobal Viedma Points 272

Je suppose que vous pourriez le faire aussi quelque chose comme:

(Time.mktime(0)+3600).strftime("%H:%M:%S")

Mettre en forme comme vous le souhaitez.

BTW, à l'origine je pensais de l'aide de Temps.à (), mais il semble que l'ÉPOQUE sur mon Ubuntu est Jeu Jan 01 01:00:00 +0100 1970 et pas 00:00:00 heures, comme je m'y attendais, et donc si je fais:

Time.at(3600).strftime("%H:%M:%S")

Donne moi 1 heure de plus que voulu.

6voto

Xiao Bin Points 51

Attention à la durée de plus d'une journée.

(timing/3600).to_i.to_s.rjust(2,'0') + ":"+Time.at(timing).utc.strftime("%M:%S")

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X