Outofmemoryoutofmemory.dev logo

Возможно, это ошибка использовать strftime в Rails view

August 04, 2019 [ Rails ]

Автор оригинала - Andy Croll

Функция strftime присутствует во многих языках программирования вплоть до языка C. Синтаксис аргументов форматирования фактически не изменился за года и на удивление почти одинаковый во всех языках.

Версия для Ruby полностью описана в документации к классу Time.

Однако, использование функции strftime с большей вероятностью может привести к путанице и неопределенности.

Вместо…

…использования strftime в ваших views для форматирования даты и времени

<%= @user.last_signed_in_at.strftime("%m-%e-%y %H:%M") %>

Используй…

… встроенные в Rails форматы даты и времени. Или добавь их, как это делаю я, создав свой :stamp формат для Date и Time.

config/initializers/time_formats.rb

Date::DATE_FORMATS[:stamp] = "%Y%m%d" # YYYYMMDD
Time::DATE_FORMATS[:stamp] = "%Y%m%d%H%M%S" # YYYYMMDDHHMMSS

Тогда в ваших views:

<%= @user.last_signed_in_at.to_s(:stamp) %>

Почему?

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

Главное преимущество использования глобально настроенного форматирования заключается в помощи остальным разработчикам, которые придут после тебя включая “будущего” себя самого же. Как результат - строго определенное количество путей для представления времени в твоем приложении. Это пощадит будущих разработчиков от написания кучи своих форматов.

Пользователь тоже выигрывает от такого подхода. Если дата и время всегда отображаются одинаково - пользователю легче и удобней их читать. Убедись, например, что пользователь всегда видит “11 Окт”, а не “Окт 11”. Мелочь, но думаю, того стоит.

Вот несколько ресурсов, которые помогут тебе <%=username%> выбрать нужное форматирование для даты:

For A Good Strftime - содержит в красивом виде набор возможных вариантов для strftime и позволит в живом режиме сконфигурировать любой формат.

Strftimer - даёт возможность ввести дату в нужном формате, а затем возвращает вам формат для strftime, который и будет форматировать дату в изначально заданный формат.

Я никогда не мог запомнить форматы Date и Time которые, предоставляются по умолчанию, плюс ко всему, их сложно найти в документации и поэтому я создал страницу с стандартными форматами даты и времени в Rails.

Почему нет?

При использовании strftime в Rails view нет никакой проблемы с производительностью. Здесь самое главное организация и последовательность.


© 2020, Вячеслав Городович