42

这是我想展示的内容:

May 13, 2012

这是正在显示的内容:

2012-05-13

我搜索了一些答案,它引导我进入“在 Ruby 中格式化日期和浮点数”,其中提到了一个可能的解决方案:

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

但是,这根本不会改变输出。没有调试错误或异常被触发。

我可以做到这一点,而且效果很好:

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

这是我的迁移文件(查看我使用的数据类型):

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

      t.date :postdate

      t.timestamps
    end
  end
end
4

3 回答 3

60

Date.to_s不一样Time.to_s。你postdate是 a Date,因此你可能想看看strftime

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

或者甚至希望将您自己的自定义日期格式添加到您的 Rails 应用程序中:
在 ruby​​ 中转换日期格式时需要一些帮助

于 2012-08-07T00:11:10.227 回答
54

to_formatted_s函数已经为Rails 中的对象提供了一些常见的人类可读格式。DateTime

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"
于 2014-05-29T18:45:19.147 回答
3
<%= time_ago_in_words @user.created_at %>

结果:9 小时前

于 2020-07-08T01:14:24.463 回答