У меня проблема с подсчетом дней между 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 для вычисления разницы между датами?

-1
Prezes Łukasz 28 Апр 2016 в 12:31

2 ответа

Лучший ответ

Ваша проблема в том, что у вас есть массив Vacations.

Если вам действительно нужен массив, нет проблем.

# notice the pluralised variable name
@nearest_vacations.map{|nv| (nv.end_at - nv.start_at)}

Приведенное выше вернет вам массив с разницей в датах.

Я подозреваю, что здесь происходит то, что вы путаете массивы и экземпляры. Вот почему вам пришлось использовать .map, чтобы получить значение end_at из массива отпусков.

Я думаю , что настоящий вопрос здесь в том, почему ваш nearest_vacation является массивом. Имя переменной и тот факт, что она не во множественном числе, говорят мне, что вам нужен не массив, а только один экземпляр. Найдите, где ваша переменная nearest_vacation установлена в массив, исправьте это, тогда ваш код должен работать.

2
DickieBoy 28 Апр 2016 в 09:49

Вы можете использовать метод mjd:

Date.parse("2016-05-02").mjd - Date.parse("2016-04-20").mjd
=> 12 #days
2
Ilya 28 Апр 2016 в 09:46