2017-08-26 5 views
0

Ich habe eine Rails 4 App, in der wir den Benutzer mit einem Datepicker präsentieren müssen, aber das gewählte Datum sollte im MM-DD-YYYY Format sein. Wenn ActiveRecord das Datum an Rails sendet, erkennt ActiveRecord das Format nicht, da ich weiß, dass es YYYY-MM-DD erwartet. Validierungen schlägt fehl (Datum ist nicht vorhanden).Datepicker gewählt Datumsformat zu Rails Backend

Die JS ist wie folgt:

$("#some_date").datetimepicker 
    pickTime: false 
    format: 'MM-DD-YYYY' 

(das Display funktioniert super mit einem hervorragenden picker, das angezeigt wird).

Dann meine schlanke Vorlage:

= f.input :date, as: :string, label: false, input_html: { class: 'form-control', value: @visit.date.strftime('%m-%d-%Y') } 
p.help-block MM-DD-YYYY 

Wenn ich das Format YYYY-MM-DD ändern funktioniert perfekt und das Datum wird in PostgreSQL gespeichert wie es ist, aber in den USA, wird das Datum in der Regel als MM-DD-YYYY angezeigt.

Ich möchte auch nicht zu sehr mit Hilfsmethoden oder konvertieren das Datum von HTML-Eingaben auf jedem Controller so PostgreSQL ist glücklich. Ich habe mich gefragt, ob es eine Möglichkeit gibt, wie das Datumsformat geändert werden kann, wenn es zum Backend geht?

In meinem config/locales/en.yml, ich habe:

date: 
    formats: 
    default: '%m/%d/%Y' 

Prost!

Antwort

0

Bootstrap datetimepicker scheint nicht die Option für ein alternatives Format zum Senden an den Server zu haben. Aber wenn alles, was Sie brauchen, ist ein Datepicker und Sie kümmern sich nicht um Zeit, können Sie JQuery Datepicker versuchen. Es ermöglicht Ihnen, ein DateFormat zum Anzeigen und ein AltFormat zum Senden an den Server zu senden.

0

In jquery gibt es ein Feld namens altFormat, das Sie verwenden können. Die Datenbankspalte enthält keine Zeitzoneninformationen, aber die Zeitzone ist implizit UTC. Sie können die Modellmethode verwenden, um das gewünschte Format zu erhalten. Anstatt die DB in einem bestimmten Format zu speichern, kann ich mithilfe der Modellmethode ein bestimmtes Format analysieren.

def your_date 
    self[:column_name].strftime("%m-%D-%Y") 
end 

und Sie möchten auch die Zeit entsprechend der Zeitzone des Benutzers ändern, bevor Sie das Format analysieren.

user_record = db_query.your_date 
current_user.zone.parse(user_record) 

Hier sind einige Referenzen hilfreich für Sie.

http://brendankemp.com/essays/dealing-with-time-zones-using-rails-and-postgres/ https://apidock.com/ruby/DateTime/strftime

PS: Wenn Sie eine andere Art und Weise besser plz tun Post finden.

Verwandte Themen