Изменение даты и времени в формате ISO8601 в объект Rails datetime

#ruby-on-rails #ruby-on-rails-4 #fullcalendar

#ruby-on-rails #ruby-on-rails-4 #полный календарь

Вопрос:

Я использую плагин jquery под названием Fullcalendar (v2.02), который предоставляет объекты datetime как ISO8601.

Я могу легко изменить объект datetime на iso8601, просто используя date_object.iso8601 (простой метод ruby).

Проблема, с которой я сталкиваюсь, заключается в том, что когда Fullcalendar выдает мне диапазон дат и времени, скажем, start = 1401058800 и end = 1404687600 (мой календарь на июнь), мне затем нужно получить эти начальные и конечные значения в формате даты, чтобы я мог запросить свою таблицу собраний, чтобы вернуть все экземпляры собраний, которые происходят в течение этого времени.

В Rails 4.1.1 следующая функция работала нормально:

 def self.format_date(date_time)
    date_time.to_datetime
end
  

Но в Rails 4.1.2 он возвращает ошибку (при попытке преобразовать время начала или окончания iso8601):

 ArgumentError - invalid date
  

Кто-нибудь знает, пожалуйста, как я могу преобразовать (в Rails 4.1.2) объект даты и времени iso8601 в объект даты и времени, с помощью которого я могу запрашивать свою базу данных?

Формат таблицы собраний следующий:

 # == Schema Information
#
# Table name: meetings
#
#  id          :integer          not null, primary key
#  title       :string(255)
#  starts_at   :datetime
#  created_at  :datetime
#  updated_at  :datetime
#  description :string(255)
#  ends_at     :datetime
#  user_id     :integer
#  all_day     :boolean
  

Область действия:

 scope :between, ->(start_time, end_time, user_id) {
       where(starts_at: (Meeting.format_date(start_time)..Meeting.format_date(end_time)),
             user_id: user_id)
  }
  

Ответ №1:

Попробуйте эти:

 Time.at(1401058800).to_datetime
Time.at(1401058800).to_date
  

Или, если быть точным:

 def self.format_date(date_time)
    Time.at(date_time.to_i).to_datetime
end
  

Комментарии:

1. Боюсь, что нет, ошибка: TypeError — не удается преобразовать строку в точное число: activesupport (4.1.2) lib /active_support /core_ext / time / calculations.rb: 44: в at_with_coercion' app/models/meeting.rb:51:in format_date’ app /models /meeting.rb: 28: в `блоке в <class:Meeting>’

2. @десять раз попробуйте отредактированную версию. Это временная метка, верно?