诗歌rails之Time Date时间转换和格式化输出

    我们在很多开发的过程中会用到,对时间进行转换或者标准格式输出。

     也有一些情况下,我们mysql的数据库有datetime类型的数据库进行查询,或者保存。

对于,这些不同的情况,简单的罗列一下解决方法,或者,会用到。

先从最一般的开始吧:

1.格式化输出

那么最常用到的应该是:
Ruby代码
  1. DateTime.parse(Time.now.to_s).strftime('%Y-%m-%d %H:%M:%S').to_s#就是按照2009-5-14 8:42:13的给定格式输出  

这个比较容易也经常用到。

2. 反向格式化

就是,从表单提交了一定格式的字符串,想把它格式化成一个日期类型的变量。
Ruby代码
  1. DateTime.parse(params['start_date']).strftime('%Y-%m-%d %H:%M:%S').to_s  

这里需要说明DataTime.parse比较强,其他格式也能猜出来,但我处理带时区的时候,总出问题。相当于
Ruby代码
  1. DateTime.parse(params['start_date']).strftime('%F %T').to_s  


3. 集成多种方式输出

Ruby代码
  1. # config/initializers/date_time_formats.rb  
  2. Time::DATE_FORMATS.merge!(  
  3.   :full => '%B %d, %Y at %I:%M %p',  
  4.   :md => '%m/%d',  
  5.   :mdy => '%m/%d/%y',  
  6.   :time => '%I:%M %p'  
  7. )  


这时,你就可以简单的通过调用
Ruby代码
  1. Time.now.to_s(:full)#按照之前定义"May 14, 2009 at 08:39 AM"  


4. 满足变化需求的输出

比如,要求是当前年份,不显示年,其他的年才显示

Ruby代码
  1. Time::DATE_FORMATS.merge!(  
  2.   :friendly => lambda { |time|  
  3.     if time.year == Time.now.year  
  4.       time.strftime "%b #{time.day.ordinalize}"  
  5.     else  
  6.       time.strftime "%b #{time.day.ordinalize}, %Y"  
  7.     end  
  8.   }  
  9. )  

Ruby代码
  1. >> Time.now.to_s(:friendly)  
  2. => "May 14th"  
  3. >> (Time.now-2.years).to_s(:friendly)  
  4. => "May 14th, 2007"  

posted @ 2009-08-24 18:46  麦飞  阅读(6145)  评论(0编辑  收藏  举报