Ruby: разбор времени из строки - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь передать массив времен, хранящихся в виде строк (["08:00:00", "18:00:00"]), и вернуть их более читабельным способом с помощью вспомогательного метода.

Однако я продолжаю получать сообщение об ошибке аргумента в вспомогательном методе. Это очень странно для меня, потому что, если я удаляю Time.parse(time_slot) и просто пытаюсь преобразовать время, используя time_slot.strftime("%I:%M %p"), выдается ошибка undefined method `strftime' for "08:00:00":String. Объект явно передается - я что-то не понимаю?

строка 4: часы << Time.parse (time_slot) .strftime ("% I:% M% p") <br>нет информации о времени в ""

код:

1: - I18n.t('date.day_names').each do |day|
2:   - %w[starts ends].each_with_object([]) do |time_type, to_return|
3:     - @hours = to_return << @facility.access_hours["#{time_type}_#{day.downcase}"]
4:   - @hours.compact.tap do |hours|
5:     = day
6:     = hours
7:     = time_helper(hours)
8:     = byebug
(byebug) hours = ["08:00:00", "18:00:00"]
(byebug) time_helper(hours) = "08:00 AM - 06:00 PM"

вспомогательный метод

def time_helper(time)
  hours = []
  time.each do |time_slot|
    hours <<  Time.parse(time_slot).strftime("%I:%M %p")
  end
  hours.join(' - ')
end

1 Ответ

1 голос
/ 29 октября 2019

Это очень странно для меня, потому что, если я удаляю Time.parse (time_slot) и просто пытаюсь преобразовать время, используя time_slot.strftime ("% I:% M% p"), ​​он выдает ошибкунеопределенный метод `strftime 'для" 08:00:00 ": String. Объект явно передается - я что-то не понимаю?

time_helper вызывается с массивом, как ["08:00:00", "", "18:00:00"].

"08:00:00" анализируется, нозатем Time.parse подавится "". Если вы попробуете time_slot.strftime("%I:%M %p") strftime ошибки на "08:00:00", потому что это строка, а не время.

Это можно исправить, как рекомендует PGiII, с помощью @hours.reject(&:blank?), которая будетудалить nil, а также пустые строки . Хотя вы все еще можете понять, почему в @facility.access_hours есть пробелы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...