2016-07-21 7 views
0

Meine App verwendet bootstrap3-datetimepicker zur Anzeige der Uhrzeit (Stunde und Minute).Rails: Falsche Uhrzeit wird mit bootstrap3-datetimepicker angezeigt

Die Zeit kann in der Tabelle korrekt gespeichert werden und kann in der Ansicht show angezeigt werden.

Aber falsche Zeit wird angezeigt, wenn ich versuche, zu bearbeiten. Obwohl der Minit korrekt ist, ist die Stunde falsch (immer 20 Uhr).

Zum Beispiel

DB: 04:01:00

Ausblick: 8:01 PM (Format ist LT)

Ich erwarte 4:01 AM zu sein.

edit.html.erb

<%= render 'event_form'%> 

_event_form.html.erb

Dies sowohl :start_at und :end_at passieren.

<%= form_for([@room, @event]) do |f| %> 

    ... 

    <div class="container"> 
    <div class="row"> 
     <div class='col-sm-6'> 
     <div class="form-group"> 
      <div class='input-group date' id='datetimepicker1'> 
      <%= f.text_field :start_at, :class => 'form-control'%> #this line 
      <span class="input-group-addon"> 
       <span class="glyphicon glyphicon-time"></span> 
      </span> 
      </div> 
     </div> 
     </div> 
     <script type="text/javascript"> 
     $(function() { 
      $('#datetimepicker1').datetimepicker({ 
      format: 'LT' 
      }); 
     }); 
     </script> 
    </div> 
    </div> 

<div class="container"> 
    <div class="row"> 
     <div class='col-sm-6'> 
      <div class="form-group"> 
       <div class='input-group date' id='datetimepicker2'> 
        <%= f.text_field :end_at, :class => 'form-control'%> #this line 
        <span class="input-group-addon"> 
         <span class="glyphicon glyphicon-time"></span> 
        </span> 
       </div> 
      </div> 
     </div> 
     <script type="text/javascript"> 
      $(function() { 
       $('#datetimepicker2').datetimepicker({ 
        format: 'LT' 
       }); 
      }); 
     </script> 
    </div> 
</div> 

    ... 

Ich folge https://eonasdan.github.io/bootstrap-datetimepicker/#custom-formats

Schema

create_table "events", force: :cascade do |t| 
    t.time  "start_at" 
    t.time  "end_at" 
    t.string "title" 
    t.string "detail" 
    t.integer "room_id" 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    t.string "category" 
    t.integer "ccy" 
    t.decimal "amount" 
    end 

events_controller.rb

... 
    def edit 
    @room = Room.find(params[:room_id]) 
    @event = @room.events.find(params[:id]) 
    end 
... 

Es wäre willkommen, wenn Sie mir geben könnte ein ny Beratung.

+0

Ich glaube, das Problem ist, dass der Datetime-Picker erwartet, dass Sie den Wert im gleichen Format festlegen. Das heißt, der Wert, den Sie an den Picker übergeben, sollte "4:01 Uhr" sein, nicht "04: 01: 00". – MrWillihog

+0

Vielen Dank für Ihre schnelle Antwort, @MrWillihog. Obwohl ich versuchte, 'l (: start_at)' zu verwenden, um die Formateinstellungen in der XML-Datei widerzuspiegeln, wird der folgende Fehler angezeigt. 'I18n :: ArgumentError (Objekt muss ein Date-, DateTime- oder Time-Objekt sein.: Start_at gegeben.):'. Dies könnte ein anderes Problem sein, aber es würde geschätzt werden, wenn Sie mir einen Hinweis geben könnten. – SamuraiBlue

+0

Ich bin mir nicht sicher, ob das der beste Weg ist, aber ich habe so etwas in meinem Javascript: '$ ('# datetimepicker'). Data (" DateTimePicker ") .date (moment (myDate) .utc(). Format (DATE_FORMAT)); '. Es lohnt sich vielleicht, darauf zu warten, dass jemand mit einer besseren Antwort kommt. – MrWillihog

Antwort

0

Es klingt wie das Datum in der DB ist in UTC, aber der Datepicker zeigt das Datum in Ihrer lokalen Zeitzone an. Sie können die Zeitzone für den Datepicker wie folgt deaktivieren

Verwandte Themen