2012-08-06 16 views
24

Esto es lo que me gustaría ver:formato a un objeto de fecha para visualizar una fecha legible por humanos

May 13, 2012 

Esto es lo que se está mostrando:

2012-05-13 

Busqué algunas respuestas y se llevó yo "Formatting Dates and Floats in Ruby", donde se menciona una posible solución:

<p class="date"><%= @news_item.postdate.to_s("%B %d, %Y") %></p> 

sin embargo, esto no cambia º e salida en absoluto. No se desencadenan errores de depuración o excepciones.

puedo hacer esto y funciona perfectamente bien:

<p class="date"><%= Time.now.to_s("%B %d, %Y") %></p> 

Aquí está mi archivo de migración (para ver qué tipo de datos que se utiliza):

class CreateNewsItems < ActiveRecord::Migration 
    def change 
    create_table :news_items do |t| 

     t.date :postdate 

     t.timestamps 
    end 
    end 
end 

Respuesta

44

Date.to_s no es lo mismo que Time.to_s . Su postdate es una Date, por lo que, por tanto, es posible que desee mirar a strftime lugar:

postdate.strftime("%B %d, %Y") 

o incluso mirar añadir su formato de fecha personalizado a la aplicación Rails:
Need small help in converting date format in ruby

+0

Véase también - http://www.ruby-doc.org/core-1.9.3/Time.html#method-i-strftime – JGrubb

+8

Una pequeña nota: 'strftime ("% B% -d ,% Y ")' es un poco más agradable para la legibilidad humana. El '% -d' elimina el 0 inicial, es decir, el 6 de mayo de 2013 => 6 de mayo de 2013. –

29

La función to_formatted_s ya tiene algunos formatos comunes legibles para humanos para los objetos DateTime en Rails.

datetime.to_formatted_s(:db)   # => "2007-12-04 00:00:00" 
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" 
datetime.to_formatted_s(:iso8601)  # => "2007-12-04T00:00:00+00:00" 
+5

que tiene un alias a _to_s_. –

Cuestiones relacionadas