2013-05-23 5 views
0

Je veux être en mesure de calculer le nombre de jours entre deux dates. Une date est la date actuelle, l'autre provient d'une base de données d'événements.Rails 3 obtenir des jours entre deux dates MySQL

Jusqu'à présent, j'ai essayé dans mon modèle:

this_date = DateTime.parse(self.date.to_s) 
    the_date = Time.now 
    between = (this_date.to_i - the_date.to_i) 

Ce qui était une suggestion d'une autre question (bien, un peu). Le format de date de la base de données est 'AAAA/mm/jj', et la date de Time.now est très différente, ce que je ne peux pas déterminer.

Toute aide serait appréciée. Merci

+0

utilisation 'Date.today' au lieu de' Time.now' – Strik3r

Répondre

0
this_date = Date.parse self.date 
remaing_days = (Date.today - this_date) 
+0

Merci pour cela –

+0

Il n'est pas nécessaire d'analyser une colonne de date à une chaîne, puis revenir à une date, et moins besoin de le stocker dans une variable - ce qui est une surcharge de mémoire inutile. – Matt

+0

à droite @Matt thnx – Strik3r

0

select (unix_timestamp (first_date) -unix_timestamp (second_date))/84600 de la table

84600 est seconde en un jour unix_timestamp est la date en secondes depuis 1970-01-01

Vous n'a pas besoin de Ruby :-)

1

Quel type de données est la colonne db pour self.date dans votre modèle? Je remarque que vous le lancez sur une corde alors qu'est-ce que c'était à l'origine? Si c'est un type datetime alors vous pouvez sauter le DateTime.parse et il suffit de comparer les deux dates directement pour obtenir la différence en quelques secondes:

difference = self.date - Time.now 

La partie amusante est alors convertir cette différence aux valeurs utilisables. This question a une excellente réponse à cela.

Edit: pour une colonne Date que vous pouvez faire:

difference = (self.date - Date.today).to_i 

Ce qui vous donnera une différence dans les jours entiers.

+0

Il est juste un format de date, qui est 'YYYY/mm/jj'. –

+0

Rails convertira les données en un objet date pour vous si la colonne est un type datetime correct, pas besoin de conversion de votre part. – Matt

+1

@StefanDunn - ajout d'un exemple pour la colonne Date. – Matt

0

Même s'il est répondu, mais je poste ma solution à ce problème, cela m'a aidé à résoudre mon problème. Je l'ai utilisé:

Time.zone.now > e.start && Time.zone.now < e.end + 1.day