170 votes

Compter le nombre de jours entre deux dates

Comment puis-je compter le nombre de jours entre ces deux dates ?

start_date = Date.parse "2012-03-02 14:46:21 +0100"
end_date =  Date.parse "2012-04-02 14:46:21 +0200"

19voto

arkilus Points 760

Aucune des réponses précédentes (à ce jour) ne donne la différence correcte en jours entre deux dates.

Celui qui s'en rapproche le plus est celui de cedankent . Une réponse complète convertirait to_i et ensuite diviser :

(Time.now.to_i - 23.hours.ago.to_i) / 86400
>> 0

(Time.now.to_i - 25.hours.ago.to_i) / 86400
>> 1

(Time.now.to_i - 1.day.ago.to_i) / 86400
>> 1

Dans l'exemple spécifique de la question, il ne faut pas analyser les données en fonction de l'adresse de l'utilisateur. Date si le temps écoulé est pertinent. Utilisez Time.parse à la place.

0 votes

Cela peut ne pas fonctionner comme prévu lorsque les heures traversent une transition DST à l'avenir. Dans ce cas, la longueur du jour de transition DST est légitimement inférieure à 24 heures, mais à cause de l'arithmétique des nombres entiers, ce jour ne sera pas du tout reflété.

6voto

Dorian Points 2384

Pour avoir le nombre de jours entiers entre deux dates ( DateTime objets) :

((end_at - start_at).to_f / 1.day).floor

0 votes

Même problème de DST que la réponse donnée par Yuri. L'arithmétique avec le temps n'est jamais aussi simple qu'on pourrait le croire :)

5voto

Aaqib Points 197

Très tard, mais cela peut aider d'autres personnes :

end_date.mjd - start_date.mjd

https://apidock.com/ruby/Date/mjd

1voto

Steve Giáp Points 1

Pour obtenir le nombre de jours de différence entre deux dates :

(start.to_date...end.to_date).count - 1
or 
(end.to_date - start.to_date).to_i

0voto

(end_date - start_date)/1000/60/60/24

si quelqu'un a une meilleure pratique, veuillez commenter ci-dessous

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