Formatting a Date as words in Rails

无人久伴 提交于 2019-12-22 03:59:07

问题


So I have a model instance that has a datetime attribute. I am displaying it in my view using:

<%= @instance.date.to_date %> 

but it shows up as: 2011-09-09

I want it to show up as: September 9th, 2011

How do I do this?

Thanks!


回答1:


<%= @instance.date.strftime("%B %d, %Y") %>

This would give you "September 9, 2011".

If you really needed the ordinal on the day ("th", "rd", etc.), you could do:

<%= @instance.date.strftime("%B #{@instance.date.day.ordinalize}, %Y") %>



回答2:


There is an easier built-in method to achieve the date styling you are looking for.

<%= @instance.datetime.to_date.to_formatted_s :long_ordinal %>

The to_formatted_s method accepts a variety of format attribute options by default. For eaxmple, from the Rails API:

date.to_formatted_s(:db)            # => "2007-11-10"
date.to_s(:db)                      # => "2007-11-10"

date.to_formatted_s(:short)         # => "10 Nov"
date.to_formatted_s(:long)          # => "November 10, 2007"
date.to_formatted_s(:long_ordinal)  # => "November 10th, 2007"
date.to_formatted_s(:rfc822)        # => "10 Nov 2007"

You can see a full explanation here.




回答3:


The Rails way of doing this would be to use

<%=l @instance.date %>

The "l" is short for "localize" and converts the date into a readable format using the format you defined in your en.yml. You can define various formats in the yml file:

en:
  date:
    formats:
      default: ! '%d.%m.%Y'
      long: ! '%a, %e. %B %Y'
      short: ! '%e. %b'

To use another format than the default one in your view, use:

<%=l @instance.date, format: :short %>



回答4:


Rails has it built into ActiveSupport as an inflector:

ActiveSupport::Inflector.ordinalize(@instance.date.day)



回答5:


You also have <%= time_tag time %> in rails



来源:https://stackoverflow.com/questions/6969348/formatting-a-date-as-words-in-rails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!