2012-09-09 7 views
2

j'ai essayé ce code, mais il ne fonctionne pas:Rails calculer la différence de temps

require 'time_diff' 

cur_time = Time.now.strftime('%Y-%m-%d %H:%M') 
time_diff_components = Time.diff(@art.datetime_of_update, Time.parse(cur_time)) 
if @art.PRICEM.to_f >= eprice.to_f || @art.PRICEM.blank? && time_diff_components[:hour] < 3 && 

mais timeDiff est 0, en db temps ressemble à ceci:

2012-08-28 19:53:12

Comment calculer la différence en heure entre maintenant et db?

+0

Si vous voulez juste le temps en heures, alors 'time_diff' n'est pas la bibliothèque que vous voulez utiliser. Juste soustraire les deux fois les uns des autres et diviser par '1.hour' – Gareth

+0

Pour être clair, si la différence entre 2 fois est" 1 jour et 2 heures "alors' time_diff_components [: hour] 'sera 2 (pas 26) . Cela ne ressemble pas à ce que vous voulez? – Gareth

+0

oui, mais voir résoudre de Jon Skeet – brabertaser19

Répondre

4

Tout d'abord, vous devriez regarder ces deux lignes:

cur_time = Time.now.strftime('%Y-%m-%d %H:%M') 
time_diff_components = Time.diff(@art.datetime_of_update, Time.parse(cur_time)) 

Pourquoi voudriez-vous le format le temps et seulement utiliser la valeur que l'entrée à une opération d'analyse syntaxique? Certes, il serait plus simple - et moins fragile - écrire:

time_diff_components = Time.diff(@art.datetime_of_update, Time.now) 

Je ne sais pas pourquoi Time.diff ne fonctionne pas pour vous (je ne suis pas un dev Ruby), mais si le but est de vérifier si l'article a été mis à jour « il y a moins de 3 heures », puis il y a une approche plus simple: soustraire trois heures à partir de l'heure actuelle et comparer les temps de mise à jour de l'article avec cette limite:

limit_time = Time.now + 3.hours 
if @art.PRICEM.to_f >= eprice.to_f || @art.PRICEM.blank? && @art.datetime_of_update >= limit_time 
+0

Peut-être' limit_time = Time.now + 3.heures' puisque OP utilise Rails et donc 'ActiveSupport' de toute façon. –

+0

@Michael: merci, édité. C'est pourquoi il m'est dangereux de répondre aux questions de Ruby. Je suppose que le reste de ma réponse est sensible cependant? –

+0

ok, va le vérifier – brabertaser19

3

Si vous n'avez pas Soyez précis, vous pouvez utiliser l'assistant time_ago_in_words de Rails. Bien entendu, en fonction de la différence de temps, cela peut également renvoyer des 'minutes', des 'jours', etc ....

+0

c'est bon, mais ce n'est pas pour moi – brabertaser19

+0

OK, pas de sentiments durs :) –

Questions connexes