2009-08-14 4 views
1

Si un train part dans moins d'une heure, je veux que sa rangée dans le tableau de calendrier soit surlignée en rouge. Actuellement, je fais le calcul comme ceci:Le meilleur moyen d'exprimer "moins d'une heure dans le futur" dans Rails?

if Time.zone.now + 1.hour > t[from_station] 
    # do whatever 
end 

Cela fonctionne et sorte de logique, mais je me demande s'il y a une façon plus claire/plus idiomatiques pour exprimer (je pourrais imaginer revenir à ce code dans un quelques mois et avoir à faire une pause pour un instant pour analyser mentalement Time.zone.now + 1.hour).

Répondre

11

Vous pouvez utiliser from_now:

if t[from_station] < 1.hour.from_now 

Lorsque vous utilisez Time.zone.now, vous devrez préciser, donc since est probablement plus lisible (from_now est juste un alias à since):

if t[from_station] < 1.hour.since(Time.zone.now) 
+0

Très bonne réponse. Est-il possible de faire fonctionner '1.hour.from_now' (qui semble être la façon la plus correcte d'exprimer cela) avec le fuseau horaire par défaut de l'application Rails (tel que défini dans environment.rb)? –

+1

'from_now' prend un seul argument. Par défaut, il utilise 'Time.now'. Vous pouvez, bien sûr, le passer 'Time.zone.now' comme je l'ai fait avec' depuis '(ils sont en fait la même méthode). Si vous voulez que 'Time.now' soit réglé sur le fuseau horaire correct (afin que vous n'ayez même pas à fournir un argument), vous devez définir' ENV ['TZ'] '(ou la variable d'environnement' TZ') le fuseau horaire correct, aussi. – Pesto

Questions connexes