Formatting Dates, Times, and CurrenciesProblemContributed by: Andy Shen You want to know how to format dates, times, and currencies in your application's views. SolutionRails provides the following two default formats for formatting date or time objects: >> Date.today.to_formatted_s(:short) => "1 Oct" >> Date.today.to_formatted_s(:long) => "October 1, 2006" If you need a different format, use strftime with a format string: >> Date.today.strftime("Printed on %d/%m/%Y") => "Printed on 01/10/2006" See Table 5-1 for a complete list of formatting options. Table 5-1. Date format string optionsThere are some other options not documented in the API. You can use many of the date and time formatting options listed in the Unix manpages or C documentation in Ruby. For example: Here's the current date: >> Time.now.strftime("%v") => " 2-Oct-2006" All of the format options apply to Time objects, but not all the options makes sense when used on Date objects. Here's one to format a Date object: >> Date.today.strftime("%Y-%m-%d %H:%M:%S %p") => "2006-10-01 00:00:00 AM" The same option invoked on a Time object would result in: >> Time.now.strftime("%Y-%m-%d %H:%M:%S %p") => "2006-10-01 23:49:38 PM" There doesn't seems to be a format string for a single digit month, so it'll have to do something different, for example: "#{date.day}/#{date.month}/#{date.year}" For currency, Rails provides a number_to_currency method. The most basic use for this method is passing in a number you want to display as currency: >> number_to_currency(123.123) => "$123.12" The method can have a hash as its second parameter. The hash can specify the following four options
>> number_to_currency(123456.123, {"precision" => 1, :unit => "#", :separator => "-", :delimiter => "^"}) => "#123^456-1" DiscussionIt's a good idea to consolidate any formatting code you need in a Rails helper class, such as ApplicationHelper, so all your views can benefit from it: app/helpers/application_helper.rb: module ApplicationHelper def render_year_and_month(date) h(date.strftime("%Y %B")) end def render_date(date) h(date.strftime("%Y-%m-%d")) end def render_datetime(time) h(time.strftime("%Y-%m-%d %H:%M")) end end See Also
|