RailsCasts31 Formatting Time 时间的格式化

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

编辑 /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

虽然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>

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

清理代码

如果想在其他的地方也如此格式化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

时间: 2024-09-05 00:02:56

RailsCasts31 Formatting Time 时间的格式化的相关文章

Block Formatting Contexts (块级格式化上下文) 详解

     最近在学习BootStrap框架,发现里面清除浮动的类 .clearfix 跟平时自己用的不太一样.它的样式是这样的: .clearfix:before { content: " "; display: table; } .clearfix:after { content: " "; display: table; clear: both; } 用:befor和:after伪元素清除浮动是我熟悉的,不过一般我使用display:block而非display

python中时间日期格式化符号

python中时间日期格式化符号: %y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M

使用date类和format类对系统当前时间进行格式化显示

一:Date------------String 代码1:(代码二对显示出来的时间格式进行优化) package DateDemo; import java.text.SimpleDateFormat; import java.util.Date; // 需求:将现在系统的时间打印出来 // 需要的类:Date 类:生成当前系统时间 // SimpleDateFormat 类:对生成的系统时间进行格式化 // 构造方法摘要 SimpleDateFormat() public class Date

java向mysql插入时间,时间日期格式化

java向MySQL插入当前时间的几种方式和java时间日期格式化的几种方法:(资料参考网络资源) 1. java向MySQL插入当前时间的几种种方式 第一种:将java.util.Date类型的时间转成mysql数据库识别的java.sql.Date类型时间 注:java.util.Date是java.sql.Date的父类 向上转型:我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类. 通过 Cat c = new Cat(); 实例化一个Cat的对象,但当我这样定义时:

详说 Block Formatting Contexts (块级格式化上下文)

在上文<详说清除浮动>中,Kayo 较为详细地介绍了 BFC ,也就是本文的主角 Block Formatting Contexts (块级格式化上下文),本文会基于上文关于 BFC 的部分进行拓展,进一步说明 BFC 的特性. 但在进一步说明 BFC 特性之前,Kayo 首先要介绍另一个在 CSS 的可视化格式模型 (Visual Formatting Model) 中具有非常重要地位的概念——定位方案.定位方案是控制元素的布局,在 CSS 2.1 中,有三种定位方案——普通流 (Norma

(转)java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源 1. java向MySQL插入当前时间的四种方式 第一种:将java.util.Date类型的时间转成mysql数据库识别的java.sql.Date类型时间 注:java.util.Date是java.sql.Date的父类 Date time= new java.sql.Date(newjava.util.Date().getTime()); 第二种: java用PreparedS

python 下获取系统时间并格式化输出

python下面有两个时间的模块,time和datetime,当然在使用的时候都需要先import. 获得系统当前时间time.localtime(time.time()) 时间的格式化输出可以使用time下的strftime,调用为time.strftime() 例子为current_time=time.strftime('%Y-%m-%d',time.localtime(time.time())) 输出的时间格式为2015-02-11,这个输出是一个string类型的数据 还有datatim

java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)

java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源 1. java向MySQL插入当前时间的四种方式 第一种:将java.util.Date类型的时间转成mysql数据库识别的java.sql.Date类型时间 注:java.util.Date是java.sql.Date的父类 Date time= new java.sql.Date(newjava.util.Date().getTime()); 第二种: java用PreparedS

[转].NET 中日期和时间的格式化处理

http://www.0431cn.com/ygtd_wz_nr_2077.html 一.日期和时间的格式化处理: 1.绑定时格式化日期方法:  <asp:BoundColumn datafield="time" dataformatstring="{0:yyyy-MM-dd}"> </asp:BoundColumn> 2.数据控件如DataGrid/DataList等的件格式化日期方法:  e.Item.Cell[0].Text = Con