2009-10-07 7 views

Répondre

2
@date = Time.new 
@date.month #=> 10 
@date.day #=> 7 
@date.year #=> 2009 

si vous souhaitez utiliser la chaîne de format pour certaines parties, vous pouvez faire quelque chose comme:

@date.strftime("%B #{@date.day.ordinalize}, %Y") #=> October 7th, 2009 
+0

nice donc j'ai combiné les deux réponses pour obtenir @ date.strftime ("# {@ date.month} /% e /% Y"). Semble un peu idiot que le strftime ne vient pas avec quelque chose comme% e pendant des mois. Je suis sûr qu'il y a une bonne raison, mais compte tenu des contraintes de temps, je n'ai pas le temps d'y réfléchir. sans jeu de mots. Ok peut-être. – drpepper

1

Vous pouvez probablement utiliser « % e » pour obtenir le numéro de jour sans le zéro; cependant, la page de manuel pour 'strftime()' - qui sous-tend habituellement ces conversions basées sur le temps - ne montre pas un moyen de le faire pour les mois, donc la solution regex est peut-être une façon de le faire, bien qu'il puisse y avoir plus Ruby-idiomatique façons d'atteindre le résultat équivalent.

+0

regex ici serait aller à contre-courant un peu. Il y a d'autres choses plus intuitives qui peuvent être faites avant d'utiliser regex. –

+0

merci Jon - J'ai ajouté ce peu la solution! – drpepper

+0

@smotchkiss - Je vais modifier la réponse pour qualifier la regex de 'probablement nécessaire' ... –

0

Vous pouvez utiliser un lambda/proc comme format dans Time :: DATE_FORMATS, par ex.

Loading development environment (Rails 2.3.4) 
>> Time::DATE_FORMATS[:my_format] = lambda { |time| "#{time.day}/#{time.month}/#{time.year}" } 
=> #<Proc:[email protected](irb):3> 
>> 2.months.ago.to_s(:my_format) 
=> "8/8/2009" 

Notez que le temps par défaut :: DATE_FORMATS utilise un lambda pour les deux :long_ordinal et :rfc822 formats.

Questions connexes