Рефакторинг метода запутанной даты - PullRequest
0 голосов
/ 10 ноября 2018

Мои пользователи выбирают некоторые даты из средства выбора даты, которое сохраняет даты в следующем формате:

"06/05/2019"

Я бы хотел, чтобы дата отображалась в следующем формате: «Среда, 5 июня»

Я немного борюсь с методами датировки Руби. Этот метод, который я собрал, работает, но я уверен, что если кто-нибудь поможет мне обрезать его до одной строки, то я лучше пойму методы дат в Ruby.

def friendly_date(input)
    orig_due_date = Date.strptime(input, "%m/%d/%Y")
    orig_due_date.strftime("%A, %B %e")
end

Заранее благодарим вас за понимание.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Вы могли бы написать ...

def friendly_date(input)
  Date.strptime(input, "%m/%d/%Y").strftime("%A, %B %e")
end

... но это не будет улучшением. Он выполняет две операции: анализ и форматирование, поэтому его легче понять как две строки. Называя переменную просто date, это улучшение, потому что внутри этой функции это просто дата.

def friendly_date(input)
  date = Date.strptime(input, "%m/%d/%Y")
  date.strftime("%A, %B %e")
end

Лучший способ упростить ваш код - использовать одну функцию, анализирующую то, что дает указатель даты, в Date, а другую - для форматирования любого Date.

.
def date_from_datepicker(from_datepicker)
  Date.strptime(input, "%m/%d/%Y")
end

def friendly_date(date)
  date.strftime("%A, %B %e")
end

Теперь у вас есть универсальная функция для преобразования формата указателя даты в Date. И универсальная функция для преобразования любого Date или Time в ваш предпочтительный формат.

Теперь вы немедленно нормализовали бы вывод из вашего средства выбора даты в Date и преобразовывали бы его только в ваш дружественный формат по мере необходимости. Это облегчит работу со всеми датами, поскольку объекты be Date будут как можно дольше.

input_date = date_from_datepicker(params['date'])

...work with it like any other Date...

puts friendly_date(input_date)

# And it works on any Date.
puts friendly_date(some_other_date)
0 голосов
/ 10 ноября 2018

Я не вижу никаких улучшений, кроме как избегать локальной переменной

def friendly_date(input)
    Date.strptime(input, "%m/%d/%Y").strftime("%A, %B %e")
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...