码迷,mamicode.com
首页 > 其他好文 > 详细

RailsCasts31 Formatting Time 时间的格式化

时间:2014-09-05 14:23:11      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:des   style   http   color   os   io   使用   ar   strong   

task模型有个datatime型的属性due_at ,现想在每个task后将due_at展示出来。

bubuko.com,布布扣

编辑 /app/views/tasks/index.html.erb,使得due_at均显示在task后。

ruby
<ul id="taskList">
  <% @tasks.each do |task| %>
  <li><strong><%= task.name %></strong> <%= task.due_at %></li>
  <% end %>
</ul>

显示如下:

Formatting The Dates

bubuko.com,布布扣

虽然due的时间已经显示出来了,但是样式很难看。due date能如此显示,主要是因为Time对象调用了to_s。rails扩展了to_s方法以便控制Time的显示格式。一些例子如下:

Format Result
Task.first.due_at.to_s 2009-02-19 00:00:00 UTC
Task.first.due_at.to_s(:long) February 19, 2009 00:00
Task.first.due_at.to_s(:short) 19 Feb 00:00
Task.first.due_at.to_s(:db) 2009-02-19 00:00:00

如何定制格式?ruby对Time对象提供了strftime函数,其参数可通过查看API documentation page得到。 

也可创建自定义的展示格式。更新展示时间代码如下:

ruby
<%= task.due_at.strftime("due on %B %d at %I:%M %p") %></li>

刷新页面,呈现信息如下:

bubuko.com,布布扣

清理代码

如果想在其他的地方也如此格式化Time,则我们需要对代码进行优化。有很多方式可以优化代码,如添加helper方法或为Task模型添加方法。也可通过向to_s传递新的参数实现。与 :long:short or :db类似,创造自己的方法。


首先,将代码变更为如下形式:

ruby
<%= task.due_at.to_s(:due_date) %></li>

时间的格式被存储在Date类名为DATE_FORMATS的hash中,需要将key为 due_date ,值为格式字符放入hash中;由于数据格式在程序运行前应加载进来,故应将修改放入environment.rb 文件中。修改如下:

ruby
Time::DATE_FORMATS[:due_date] = "due on %B %d at %I:%M %p"

如此之后,其他的页面也可方便的使用此格式化函数。


原文地址:http://railscasts.com/episodes/31-formatting-time?view=asciicast

RailsCasts31 Formatting Time 时间的格式化

标签:des   style   http   color   os   io   使用   ar   strong   

原文地址:http://blog.csdn.net/dazhi_100/article/details/39079071

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!