web-dev-qa-db-fra.com

Décalage horaire en heures

J'essaie d'obtenir la différence d'heures pour deux instances de temps différentes. J'obtiens ces valeurs de la base de données sous la forme d'une colonne: datetime

Comment puis-je faire cela pour qu'il inclue également les mois et les années dans le calcul tout en ignorant ou en arrondissant les minutes? Cela ne peut-il être fait que manuellement ou existe-t-il une fonction pour le faire?

64
stellard
((date_2 - date_1) / 3600).round

ou

((date_2 - date_1) / 1.hour).round
132
Rômulo Ceccon

Essayez la gemme de différence de temps pour Ruby at https://rubygems.org/gems/time_difference

start_time = Time.new(2013,1)
end_time = Time.new(2014,1)
TimeDifference.between(start_time, end_time).in_years
18
user2295540

cela fonctionne très bien, par exemple pour le nombre d'heures depuis la création du compte par l'utilisateur

(Time.parse(DateTime.now.to_s) - Time.parse(current_user.created_at.to_s))/3600
12
dux

Vous pouvez utiliser une gemme appelée time_diff pour obtenir la différence de temps dans des formats très utiles

7
Abhilash M A

Vous pouvez utiliser une méthode Rails distance_of_time_in_words

distance_of_time_in_words(starting_time, ending_time, options = {include_seconds: true })
4
The Whiz of Oz

Dans Rails, il existe désormais un moyen beaucoup plus naturel pour y parvenir:

> past = Time.now.beginning_of_year
2018-01-01 00:00:00 +0100

> (Time.now - past) / 1.day
219.50031326506948
2
MattW.