Я испытываю странные вещи при работе с Datetime в Rails.
В моих моделях используется столбец
datetime
, использующий Postgres.Часовой пояс моего приложения установлен на
Central America
. Тем не менее, я работаю в тайваньском часовом поясе (на случай, если это имеет значение).Для выбора дат в моих формах я использую сборщик гемов bootstrap-datetime Eonasdan.
Согласно документации гема, я перезаписал date_select
и datetime_select
методы Rails следующим образом:
config / initializers / form.rb:
# Add to config/initializers/form.rb or the end of app/helpers/application_helper.rb
module ActionView
module Helpers
class FormBuilder
def date_select(method, options = {}, html_options = {})
existing_date = @object.send(method)
formatted_date = existing_date.to_date.strftime("%F") if existing_date.present?
@template.content_tag(:div, :class => "input-group date") do
text_field(method, :value => formatted_date, :class => "form-control datepicker", :"data-date-format" => "DD/MM/YYYY") +
@template.content_tag(:span, @template.content_tag(:span, "", :class => "fa fa-calendar") ,:class => "input-group-addon")
end
end
def datetime_select(method, options = {}, html_options = {})
existing_time = @object.send(method)
formatted_time = existing_time.to_time.strftime("%F %I:%M %p") if existing_time.present?
@template.content_tag(:div, :class => "input-group date") do
text_field(method, :value => formatted_time, :class => "form-control datetimepicker", :"data-date-format" => "DD/MM/YYYY hh:mm A") +
@template.content_tag(:span, @template.content_tag(:span, "", :class => "fa fa-calendar") ,:class => "input-group-addon")
end
end
end
end
end
На мой взгляд, в активах javascript я использую datepicker следующим образом, используя класс:
$(function () {
$('.datetimepicker').datetimepicker({
format: 'LLL',
locale: 'es',
icons: {
time: "fa fa-clock-o",
date: "fa fa-calendar",
up: "fa fa-arrow-up",
down: "fa fa-arrow-down",
previous: 'fa fa-arrow-left',
next: 'fa fa-arrow-right'
}
//useCurrent: false,
//showTodayButton: true
});
});
Как видите, я использую специальный языковой стандарт и формат для отображения даты в поле.
Обработка date
(с использованием date_select
) не вызывает никаких проблем. Но управление временем datetime
сводит меня с ума.
Например:
Я использую
datetime_select
(с выбором даты и времени), чтобы выбрать дату:15/02/2016 04:00 PM
.Сохраняю запись в базе данных. Однако, когда я проверяю запись с помощью консоли, сохраняемое значение datetime равно
2016-02-15 22:00:00
. Это та же дата, но в другое время (22:00). Что происходит?На мой взгляд, я визуализирую дату, используя следующее:
I18n.localize(mydate.to_s.to_datetime, :format => '%d/%m/%Y %I:%M %p')
Что отображает дату точно так, как она была введена при вводе: 15/02/2016 04:00 PM
. Что происходит ?!
datetime
. - person Andres   schedule 11.01.2016