Ruby 2.0
控制器操作
@date = "2013-12-21"
@new_date = @date.to_date
p @new_date
o / p:2013年12月21日星期六
在视图
<%= @new_date %>
o / p:2013-12-21
我想要观看“星期六,2013年12月21日”
答案 0 :(得分:2)
Rails is so intelligent that it automatically calls视图中的所有对象都不是通过方法.to_s
的字符串,它始终将对象的内容转换为字符串< / em>的
让我先找出根本原因,为什么会出现这样意外的输出:
kirti@kirti-Aspire-5733Z:~/workspace/testproject$ rvm use 1.9.3
Using /home/kirti/.rvm/gems/ruby-1.9.3-p484
kirti@kirti-Aspire-5733Z:~/workspace/testproject$ rails c
Loading development environment (Rails 3.2.16)
1.9.3p484 :001 > d = "2013-12-21".to_date
=> Sat, 21 Dec 2013
1.9.3p484 :002 > d.to_s
=> "2013-12-21"
1.9.3p484 :003 > d
=> Sat, 21 Dec 2013
1.9.3p484 :004 > d.class
=> Date
1.9.3p484 :005 > d.strftime('%a, %e %b %Y')
=> "Sat, 21 Dec 2013"
1.9.3p484 :006 >
"2013-12-21".to_date
为您提供Date
个实例,而不是String
个实例。d.class
证明了这一点。 d
是一个Date
个实例,我在开始时再次调用to_s
方法,因此Sat, 21 Dec 2013
再次被设置回"2013-12-21"
}。所以你的解决方案将是:
@date = "2013-12-21".to_date.strftime('%a, %e %b %Y')
"2013-12-21".to_date.strftime('%a, %e %b %Y')
会在字符串实例( 接收器 >上为String
实例提供所需的结果。 )如果您申请to_s
,您将获得相同的 接收器 。现在,您可以在视图中使用此@date
变量。
答案 1 :(得分:0)
在Ruby 2.0中的控制器动作中:
@date = "2013-12-21"
@new_date = @date.to_date
# => Sat, 21 Dec 2013
在视图中使用@new_date
。
答案 2 :(得分:0)
根据我的理解,你得到了
2013-12-21
但想要
Sat, 21 Dec 2013
它在控制台中输出的原因很简单,因为控制台会自动为您格式化。这可以通过在控制台中打印@new_date.to_s
来验证,它将是未格式化的版本。要以您想要的方式在屏幕上打印出来,您必须自己格式化。
你应该像这样使用strftime:
@new_date = @new_date.strftime('%a, %e %b %Y')
或
@date.to_date.strftime('%a, %e %b %Y')
这将正确输出2013年12月21日星期六。
答案 3 :(得分:0)
@new_date.strftime('%a, %e %b %Y')
直接在视图上使用它。
答案 4 :(得分:0)
在Rails中格式化日期对象的最佳方法是使用可用的I18n formatters。
<%= l @ new_date, format: :long %>
如指南中所述,您还可以创建其他格式。例如,如果没有默认值与您想要的格式匹配,只需定义
即可# config/locales/en.yml
en:
time:
formats:
custom: "%a, %e %b %Y"
然后使用
<%= l @ new_date, format: :custom %>