83 votes

Comment créer un objet date Ruby à partir de cette chaîne "JJ-MM-AAAA"?

Comment créer un objet date Ruby à partir de cette chaîne "JJ-MM-AAAA"?

155voto

deceze Points 200115
 Date.parse('31-12-2010')
 

Alternativement Date#strptime(str, format) .

42voto

Dave Sag Points 2652

Parce que dans les etats-unis qu'ils obtiennent les dates à l'envers, il est important de ne pas simplement utiliser Date.parse() parce que vous trouverez 9/11/2001 peut être 11 septembre 2001 aux etats-unis et 9 novembre 2001 dans le reste du monde. Pour être complètement sans ambiguïté utiliser Date::strptime(your_date_string,"%d-%m-%Y") d'analyser correctement une chaîne de date de format dd-mm-yyyy.

Essayez ceci pour être sûr:

>irb
>> require 'date'
=> true
>> testdate = '11-09-2001'
=> "11-09-2001"
>> converted = Date::strptime(testdate, "%d-%m-%Y")
=> #<Date: 4918207/2,0,2299161>
>> converted.mday
=> 11
>> converted.month
=> 9
>> converted.year
=> 2001

Pour les autres strptime formats de voir http://pubs.opengroup.org/onlinepubs/009695399/functions/strptime.html

Aussi je m'assure toujours que j'ai mis ma base de fuseau horaire pour :utc si mon site va être de la manipulation de dates, et d'utiliser Javascript sur le côté client pour afficher l'heure locale.

20voto

Simone Carletti Points 77653

Vous pouvez utiliser l' analyse Time # .

 Time.parse("20-08-2010")
# => Fri Aug 20 00:00:00 +0200 2010
 

Cependant, étant donné que Ruby pourrait analyser la date en tant que "MM-JJ-AAAA", la meilleure façon consiste à utiliser DateTime # strptime où vous pouvez spécifier le format d'entrée.

1voto

Abhi Points 197

Comme ceci Vous pouvez obtenir un objet temporel à partir d'une chaîne comme celle-ci:

 t = Time.parse "9:00 PM" 
 => 2013-12-24 21:00:00 +0530

t = Time.parse "12:00 AM"
 => 2013-12-24 00:00:00 +0530 
 

Mais Ruby analyse cela comme une date!

Vous pouvez donc utiliser la colonne comme chaîne.

 add_column :table_name, :from, :string, :limit => 8, :default => "00:00 AM", :null => false
add_column :table_name, :to, :string, :limit => 8, :default => "00:00 AM", :null => false 
 

Et vous pouvez attribuer un objet chaîne à l'attribut,

 r.from = "05:30 PM"
r.save
 

Et analyser la chaîne pour obtenir l'objet temporel,

 Time.zone.parse("02:00 PM")
 

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