У меня проблема с подсчетом дней между end_at и start_at, находящимся в объекте @nearest_vacation. Структура объекта @nearest_vacation:
[#<Vacation id: 11, start_at: "2016-04-30", end_at: "2016-05-02", free: false, reason: "Rocznica", person_id: 1>]
Когда я пытаюсь @nearest_vacation.map{|x| x.end_at}
, он возвращает: [Mon, 02 May 2016]
Такой формат даты не позволяет мне этого делать: (end_at - start_at).to_i
. Как правильно получить значения end_at и start_at для вычисления разницы между датами?
2 ответа
Ваша проблема в том, что у вас есть массив Vacations
.
Если вам действительно нужен массив, нет проблем.
# notice the pluralised variable name
@nearest_vacations.map{|nv| (nv.end_at - nv.start_at)}
Приведенное выше вернет вам массив с разницей в датах.
Я подозреваю, что здесь происходит то, что вы путаете массивы и экземпляры. Вот почему вам пришлось использовать .map
, чтобы получить значение end_at
из массива отпусков.
Я думаю , что настоящий вопрос здесь в том, почему ваш nearest_vacation
является массивом. Имя переменной и тот факт, что она не во множественном числе, говорят мне, что вам нужен не массив, а только один экземпляр. Найдите, где ваша переменная nearest_vacation
установлена в массив, исправьте это, тогда ваш код должен работать.
Вы можете использовать метод mjd
:
Date.parse("2016-05-02").mjd - Date.parse("2016-04-20").mjd
=> 12 #days
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.