web-dev-qa-db-fra.com

Formatage d'un objet date pour afficher une date lisible par l'homme

Voici ce que j'aimerais afficher:

May 13, 2012

Voici ce qui est affiché:

2012-05-13

J'ai cherché des réponses et cela m'a conduit à " Formatage des dates et des flottants en Ruby ", où il mentionne une solution possible:

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

Cependant, cela ne change pas du tout la sortie. Aucune erreur de débogage ou exception n'est déclenchée.

Je peux le faire et cela fonctionne parfaitement bien:

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

Voici mon fichier de migration (pour voir quel type de données j'ai utilisé):

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

      t.date :postdate

      t.timestamps
    end
  end
end
33
sergserg

Date.to_s n'est pas la même chose que Time.to_s. Votre postdate est un Date, donc vous voudrez peut-être regarder strftime à la place:

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

Ou même cherchez à ajouter votre propre format de date personnalisé à votre application Rails:
Besoin d'une petite aide pour convertir le format de date en Ruby

52
Casper

La fonction to_formatted_s a déjà des formats lisibles par l'homme pour les objets DateTime dans 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"
41
FernandoEscher