Ruby on Rails - как отображать дату в формате, который мне нужен? Преобразование из ГГГГ-ММ-ДД ЧЧ: ММ: СС UTC в ММ/ДД/ГГГГ
Я новичок в RoR. Я пробовал много чего, наконец пришел к следующему:
<td>
<%= Date.strptime(request.baseline_start_date, "%Y-%M-%D %H:%M:%S %Z").strftime("%M/%D/%Y")%>
</td>
Но это также дает мне ошибку:
$_ value need to be String (nil given)
Но я знаю, что request.baseline_start_date дает мне значение (попробовал распечатать его отдельно). Я не знаю, о чем он говорит, как о ноль.
Любые предложения о том, как я могу добиться преобразования формата?
Ответы
Ответ 1
В Rails вы можете использовать функцию to_time
для строки, чтобы преобразовать ее в объект Date:
'2012-11-14 14:27:46'.to_time.strftime('%B %e at %l:%M %p')
#=> "November 14 at 2:27 PM"
Для удобного интерактивного справочного руководства обратитесь к http://www.foragoodstrftime.com/
Ответ 2
Date.strptime(
"2009-04-24 18:33:41 UTC",
"%Y-%m-%d %H:%M:%S %Z"
).strftime("%m/%d/%Y")
# => "04/24/2009"
Я думаю, может быть, вы просто ошиблись в заглавной букве в строках формата.
Ответ 3
Проверьте документацию и примеры активной поддержки:
http://apidock.com/rails/ActiveSupport/CoreExtensions/DateTime/Conversions/to_formatted_s
Примеры
datetime = DateTime.civil(2007, 12, 4, 0, 0, 0, 0) # => Tue, 04 Dec 2007 00:00:00 +0000
datetime.to_formatted_s(:db) # => "2007-12-04 00:00:00"
datetime.to_s(:db) # => "2007-12-04 00:00:00"
datetime.to_s(:number) # => "20071204000000"
datetime.to_formatted_s(:short) # => "04 Dec 00:00"
datetime.to_formatted_s(:long) # => "December 04, 2007 00:00"
datetime.to_formatted_s(:long_ordinal) # => "December 4th, 2007 00:00"
datetime.to_formatted_s(:rfc822) # => "Tue, 04 Dec 2007 00:00:00 +0000"
Или, если вы действительно хотите его настроить, определите помощника, например:
def custom_format(time)
Time::DATE_FORMATS[:w3cdtf] = lambda { |time| time.strftime("%Y-%m-%dT%H:%M:%S# {time.formatted_offset}") }
end
Ответ 4
Вы можете использовать функцию String # to_time (или Date # to_time) в ActiveSupport, чтобы преобразовать строку в объект Time (или Date). Затем используйте strftime, как вы уже.
Ответ 5
Ive написал действительно красивый камень, который упрощает весь процесс и форматирует дату DRY.
Проверьте это:
http://github.com/platform45/easy_dates
Ответ 6
Что я сделал, это добавить инициализатор с именем convertions.rb в config/initializer
После этого добавьте следующую строку:
ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.update(:<name> => '<formatting>')
Оттуда вы можете отобразить свое время в формате datetime в формате:
dateVar.to_s(:<name>)
Здесь есть удобный список здесь токенов форматирования
Ответ 7
Большое спасибо за ответ. Моя проблема заключается в том, что результат, похоже, уже является строкой, и мне нужно преобразовать из даты в строку в другой формат.
Когда я смотрю на дату, хранящуюся в базе данных (Oracle), она равна mm/dd/yy, но когда я ее отображу, она добавляет метку времени и часовой пояс.
Я попытался установить значение по умолчанию в Configuration\environment.rb как
ActiveSupport:: CoreExtensions:: Дата:: Конверсия:: DATE_FORMATS.merge! (: default = > '% d% b% Y' )
Но это тоже не помогает.
В конце, если я просто получаю строку для преобразования из формата Timezone в mm/dd/yyyy, этого достаточно.