2010-01-12 6 views
4

J'ai une variable birth_date dans le format Date. Je veux le comparer à Date.today comme indiqué ci-dessous. Le problème est qu'il revient faux car il veut aussi comparer l'année. C'est un anniversaire donc je me fiche de l'année en essayant de voir si birth_date (mois et jour) est égal à Date.today.day.month.Rails Date comparée à Date.today

Des idées?

bdays = Soldier.find(:all, :conditions => ["birth_date LIKE ?", Date.today]) 

Répondre

11

Vous aurez besoin de diviser votre date, car vous voulez ignorer l'année. Vous aurez besoin d'utiliser certaines des fonctions données par votre fournisseur SQL (l'exemple ci-dessous utilise MySQL):

bdays = Soldier.find(:all, :conditions => ["DAY(birth_date) = ? AND MONTH(birth_date) = ?", Date.today.day, Date.today.month]) 

si vous utilisez SQLite (la base de données par défaut de rails), il sera un peu plus compliqué parce que ils n'ont pas un vrai type de date:

bdays = Soldier.find(:all, :conditions => ["STRFTIME('%d', birth_date) = ? AND STRFTIME('%m', birth_date) = ?", Date.today.day, Date.today.month]) 
+0

Salut, Ce fut une grande aide, merci beaucoup. Un problème que j'ai toujours est pour SQLite le STRFTIME ('% m', birth_date) =? retournera le mois de janvier comme 01 et ensuite Date.today.month comme 1 provoquant un faux. J'ai cherché partout essayer de trouver quelqu'un d'autre avec ce problème. – looloobs

4

J'ajouterais Figured postgres:

Soldier.where("EXTRACT(DAY FROM birth_date) = ? AND EXTRACT(MONTH FROM birth_date) = ?", Date.today.day, Date.today.month)

Questions connexes