格式化日期对象以显示人类可读的日期

Posted

技术标签:

【中文标题】格式化日期对象以显示人类可读的日期【英文标题】:Formatting a date object to display a human readable date 【发布时间】:2012-08-03 22:46:20 【问题描述】:

这是我想要展示的内容:

May 13, 2012

下面是显示的内容:

2012-05-13

我搜索了一些答案,然后找到了“Formatting Dates and Floats in 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

【问题讨论】:

【参考方案1】:
<%= time_ago_in_words @user.created_at %>

结果:9 小时前

【讨论】:

【参考方案2】:

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"

【讨论】:

别名为to_s【参考方案3】:

Date.to_sTime.to_s 不同。您的postdateDate,因此您可能想查看strftime

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

或者甚至希望将您自己的自定义日期格式添加到您的 Rails 应用程序中:Need small help in converting date format in ruby

【讨论】:

一个小提示:strftime("%B %-d, %Y") 对于人类可读性来说更好一些。 %-d 删除前导 0,即 2013 年 5 月 6 日 => 2013 年 5 月 6 日。

以上是关于格式化日期对象以显示人类可读的日期的主要内容,如果未能解决你的问题,请参考以下文章

如何使用人类可读的日期格式将BSON转换为JSON

将日期从人类可读格式转换为纪元失败

将人类可读的日期转换为纪元时间戳

如何以毫秒为单位获取带有 unix 时间戳的人类可读日期? [复制]

使用Rails中的DataTable对格式化的日期列进行排序

使用 Carbon 返回人类可读的日期时间差