将日期时间转换为月,日和年?

时间:2010-06-15 05:45:30

标签: ruby-on-rails ruby

我似乎无法找到这一点,我觉得它应该很容易。在Ruby on Rails中,我该如何处理:

2010-06-14 19:01:00 UTC

并将其转换为

June 14th, 2010

我可以不在视图中使用帮助器吗?

7 个答案:

答案 0 :(得分:53)

我不知道

June 14th, 2010

但如果你想要

June 14, 2010

参考how do i get name of the month in ruby on Rails?this

只做

@date = Time.now
@date.strftime("%B %d, %Y")

对于后缀使用

@date.strftime("%B #{@date.day.ordinalize}, %Y") # >>> Gives `June 18th, 2010`

答案 1 :(得分:6)

rails中的时间和日期格式:

日期

====

db:‘%Y-%m-%d’   2008-08-20

long_ordinal:‘&proc’      August 20th, 2008

long:‘%B %e, %Y’  August 20, 2008

rfc822:‘%e %b %Y’   20 Aug 2008

number:‘%Y%m%d’     20080820

short:‘%e %b’      20 Aug

日期时间

====

db:‘%Y-%m-%d’   2008-08-20 16:56:21

long_ordinal:‘&proc’      August 20th, 2008 16:56

long:‘%B %e, %Y’  August 20, 2008 16:56

rfc822:‘%e %b %Y’   Wed, 20 Aug 2008 16:56:21 -0600

number:‘%Y%m%d’     20080820165621

short:‘%e %b’      20 Aug 16:56

时间

====

db:‘%Y-%m-%d %H:%M:%S’         2008-08-20 16:56:21

long_ordinal:‘&proc’           August 20th, 2008 16:56

long:‘%B %d, %Y %H:%M’           August 20, 2008 16:56

rfc822:‘%a, %d %b %Y %H:%M:%S %z’  Wed, 20 Aug 2008 16:56:21 -0600

short:‘%d %b %H:%M’               20 Aug 16:56

number:‘%Y%m%d%H%M%S’              20080820165621

time:‘%H:%M’                     16:56

例如:

<%= news.created_at.strftime("%B %d, %Y %H:%M") %>

感谢http://onrails.org/2008/08/20/what-are-all-the-rails-date-formats.html

答案 2 :(得分:5)

供将来参考:Rails date time formats

答案 3 :(得分:3)

您无需将其保存在变量中。

Time.now.strftime("%Y-%m-%d")  # 2013-01-08

答案 4 :(得分:2)

需要Time.parse的时间模块和Integer#ordinalize的ActiveSupport:

require 'time'
require 'active_support'

input = '2010-06-14 19:01:00 UTC'
t = Time.parse(input)
date = "%s %s, %d" % [t.strftime("%B"), t.day.ordinalize, t.year]
# => "June 14th, 2010"

答案 5 :(得分:0)

就在前几天有一个类似的问题。在我的回答how do I get name of the month in ruby on Rails?中,我展示了如何在to_s文件中添加自定义config/environment.rb定义。

ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.merge!(
 :my_own_long_date_format => "%B %d, %Y")

现在,您可以从任意视图中致电Time.now.to_s(:my_own_long_date_format)获取:

June 15, 2010

答案 6 :(得分:0)

在Rails 5中运行的更新:

<%= l @user.created_at, format: :short %>

国际化:

<%= I18n.l( @user.created_at, format: :short) %>

您可以使用:long代替:short