开发者

Formatting a Date as words in Rails

So I have a model instance that has a datetime attribute. I am displaying it in my view us开发者_JS百科ing:

<%= @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!


<%= @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") %>


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.


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 %>


Rails has it built into ActiveSupport as an inflector:

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


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

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜