2010-10-28 5 views

Antwort

4

Ab Ruby 1.9 Date.parse Handhabung gestoppt, um die mehrdeutigen Format mm/tt/(American-Format) oder tt/mm/jjjj (übrige zivilisiertes Weltformat).

Die american_date gem linked here macht die Annahme, ältere Ruby tat, und kann somit ein amerikanisches Datum wie erwartet analysieren.

1

Wenn Sie ein Juwel mit nicht abgeneigt sind, können Sie das Chronic gem check out: https://github.com/mojombo/chronic

Sie können chronische analysieren haben Ihr Beginndatum vor, das Modell zu speichern.

0

Die Date-Klasse ruft die self.parse-Methode auf, um die angegebene Zeichenfolge nach Datum zu analysieren.

1.9.2p320 :051 > x = Date.parse('2011-31-12') 
ArgumentError: invalid date 
from .../rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/date.rb:1022:in `new_by_frags' 
from .../rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/date.rb:1066:in `parse' 

, die wiederum ruft eine selbst Methode "_parse", die in der Datei gespeichert ist ".../Rubin-1.9.2-p320/lib/ruby ​​/ 1.9.1/Datum/format.rb" .

Es ruft die Funktion strftime ("def strftime (fmt = '% F')") auf, wobei das Standardformat für die Datumsformatierung "% F" ist, was laut Dokumentation der Zeitklasse "% F - The ISO 8601 Datumsformat (% Y-% m-% d) ".

4

In Ihrem Codebeispiel wird Date.parse nicht korrekt angezeigt, da Datumsangaben im US-Format nicht interpretiert werden können, aber Sie haben Recht. Statt dessen:

Date.parse("12/31/2010") 

verwenden:

Date.strptime("12/31/2010", "%m/%d/%Y") 
0

In modernem Rubin (dh mit prepend) können Sie Ihr eigenes Typcasting vor Rails einfügen. Sie sollten dies für alle anderen von Ihnen verwendeten Datums-/Uhrzeitformate tun. Hier ist der Code für Date, nur Stick dies in einem config/initializers/typecasts.rb oder irgendwo:

module Typecasting 
    module Date 
    def cast_value v 
     ::Date.strptime v, "%m/%d/%Y" rescue super 
    end 
    end 

    ::ActiveRecord::Type::Date.prepend Date 
end 

Rails wird das amerikanische Format versuchen und fällt zurück, um die eingebaute Methode zu verwenden, wenn das nicht funktioniert.

Verwandte Themen