Frage

Ich habe in einem Spot laufen mit Datumsformate in unserer Rails Anwendung stören.

Ich habe ein Datumsfeld in unserer Ansicht, die ich will formatiert werden als TT / MM / JJ . Dies ist, wie der Benutzer erwartet, dass ihre Daten eingeben, und die Datumsauswahl-Steuerelement verwendet dieses Format.

Allerdings Active Record scheint zu erwarten mm / tt / jj .

Wenn ich eingeben 01.03.2010 , wird dieses in 3. Januar 2010 .

Wenn ich eingeben 25.03.2010 , wird dieser in einer null .

Wie kann ich Active bekommen ihr Majestäten Datumsformat zu erwarten?

War es hilfreich?

Lösung

Rails' Datetime versucht, die Formatierung automatisch zu erkennen. mm/dd/yy oder dd-mm-yy oder yyyy-mm-dd oder yyyy/mm/dd: Es werden die folgenden Formate erkennen. Sie könnten Affen Patch DateTime.parse, aber ich würde lieber dieses Problem bewegen, um die Ihre Anwendung.

Ich empfehle immer yyyy-mm-dd [hh:mm:ss] als String-Darstellung für ein Datum zu verwenden. Überprüfen Sie die Dokumentation Ihrer Datepicker, wenn es mehrere Datumsformate unterstützt.

Die jQuery Datumsauswahl zum Beispiel hat die mit dateFormat abgedeckt (für die Daten, die an den Server gesendet wird, gesetzt, dies zu yyyy-mm-dd) sowie altFormat (für die Eingabe des Benutzer sieht, stellt dies dd/mm/yyyy).

Andere Tipps

Fügen Sie eine Datei rails_defaults.rb zu config\initializers Verzeichnis mit dem Namen; mit folgenden Zeilen:

Date::DATE_FORMATS[:default] = '%d/%m/%Y'
Time::DATE_FORMATS[:default]= '%d/%m/%Y %H:%M:%S'

Starten Sie den Server und Sie sind gut zu gehen.

class Date
  class << self
    def _parse_with_us_format(date, *args)
      if date =~ %r{^(\d+)/(\d+)/(\d+)$}
        _parse_without_us_format("#{$3.length == 2 ? "20#{$3}" : $3}-#{$1}-#{$2}", *args)
      else
        _parse_without_us_format(date, *args)
      end
    end
    alias_method_chain :_parse, :us_format
  end
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top