Rails: неправильное время отображается с использованием bootstrap3-datetimepicker

97
12

Мое приложение использует bootstrap3-datetimepicker для отображения времени (час и минута).

Время может быть сохранено в таблице правильно, и может быть отображено в show - представлении.

Но при попытке редактировать отображается неправильное время. Хотя миниатюр правильный, час неправильный (всегда 8 вечера).

Например,

DB: 04:01:00

Просмотр: 8:01 PM (формат LT)

Я ожидаю, что буду 4:01 AM.

edit.html.erb

<%= render 'event_form'%>

_event_form.html.erb

Это происходит как :start_at и :end_at.

<%= 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>

...

Я следую https://eonasdan.github.io/bootstrap-datetimepicker/#custom-formats

схема

  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
...

Было бы полезно, если бы вы могли дать мне какие-либо советы.

спросил(а) 2021-01-19T14:53:18+03:00 2 месяца, 4 недели назад
1
Решение
130

Похоже, что дата в БД находится в UTC, но датапикер отображает дату в вашем местном часовом поясе. Вы можете отключить часовой пояс для datepicker следующим образом

var options = {};
options['timeZone'] = '';
$('.datetimepicker').datetimepicker(options);

ответил(а) 2021-01-19T14:53:18+03:00 2 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема