Comment créer un objet date Ruby à partir de cette chaîne "JJ-MM-AAAA"?
Réponses
Trop de publicités? Date.parse('31-12-2010')
Alternativement Date#strptime(str, format)
.
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.
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.
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")