Comment générer un lisible par l'homme intervalle de temps à l'aide de ruby on rails
J'essaie de trouver la meilleure façon de générer la sortie suivante
<name> job took 30 seconds
<name> job took 1 minute and 20 seconds
<name> job took 30 minutes and 1 second
<name> job took 3 hours and 2 minutes
J'ai commencé ce code
def time_range_details
time = (self.created_at..self.updated_at).count
sync_time = case time
when 0..60 then "#{time} secs"
else "#{time/60} minunte(s) and #{time-min*60} seconds"
end
end
Est-il un moyen plus efficace de le faire. Il semble que beaucoup de code redondant pour quelque chose de super simple.
Une autre utilisation est la suivante:
<title> was posted 20 seconds ago
<title> was posted 2 hours ago
Le code est similaire, mais au lieu de cela j'utilise de Temps.maintenant:
def time_since_posted
time = (self.created_at..Time.now).count
...
...
end
Vous devez vous connecter pour publier un commentaire.
Si vous avez besoin de quelque chose de plus "précis" que
distance_of_time_in_words
, vous pouvez écrire quelque chose le long de ces lignes:Oh, une remarque sur ton code:
est vraiment mauvaise façon de se faire la différence. Utilisez simplement:
100-50
en comptant tous les nombres entre 50 et 100.5:30:25
, rigt alignés. Beaucoup plus lisible dans un tableau de données que le "flou" des expressions de DH.1 day 10 hours
vs1 days 10 hours
le code ci-dessus retours.humanize(86_400_001) => "0 days 0 hours 0 minutes 1 seconds"
est faux. Ce bug peut être corrigé par la mise à jour du dernier élément du tableau à[Float::INFINITY, :days]
.Il existe deux méthodes
DateHelper
qui pourraient vous donner ce que vous voulez:time_ago_in_words
distance_of_time_in_words
distance_of_time_in_words
est i18n-conscient et a une double interface : il peut être utilisé directement sur une durée :distance_of_time_in_words(6270.873) #=> environ 2 heures
(en français)chronic_duration analyse numérique du temps lisible et vice versa
Si vous voulez montrer significative des durées en secondes pour les jours de plage, une alternative serait (car il n'a pas à effectuer le meilleur):
Vous pouvez également être intéressé seulement par le décapage de la partie secondes quand il n'a pas d'importance (en montrant également une autre approche):
Espère que ça aide.
Il y a un problème avec
distance_of_time_in_words
si u ll y passer 1 heure 30 min ll retour environ 2 heuresSimplement ajouter dans helper:
Fondamentalement, il suffit de transmettre vos données en quelques secondes.
Rails a un
DateHelper
pour les vues. Si ce n'est pas exactement ce que vous voulez, vous pouvez écrire votre propre.@Mladen Jablanović a une réponse avec des exemples de code. Toutefois, si vous n'avez pas l'esprit continuant à personnaliser d'un échantillon d'humaniser la méthode, cela pourrait être un bon point de départ.
Cela vous donne un tableau de valeurs et de l'unité de noms que vous pouvez manipuler.
Si le premier élément est non nul, c'est le nombre de jours. Vous pouvez écrire du code pour gérer plusieurs jours, comme montrant des semaines, des mois et des années. Sinon, coupez la pointe
0
valeurs, et de prendre les deux.Le code trouve même utiliser un ruby
while
déclaration.