新手问题 如何重写 Rails 时间对象重写格式化方法

lilijreey · 发布于 2016年10月31日 · 最后由 mingyuan0715 回复于 2016年11月03日 · 539 次阅读
24996

大家好, Rails 中如何设置 created_at 等时间对象的 to_s 方法的默认显示值.  我的当前是 '2016-02-3 12:33:1 UTC' 如何变为自定义格式 ?

共收到 10 条回复
121
lyfi2003 · #2 · 2016年10月31日 2 个赞

XY 问题, 不如直接定义一个 helper 方法来格式化时间:

def format_time(time)
  time.strftime("%Y-%m-%d %H:%M")
end

def format_date(time)
  time.strftime("%Y.%m.%d")
end

24996
lilijreey · #3 · 2016年10月31日
9442
flowerwrong · #4 · 2016年10月31日

全局的可以打patch

18898
flemon1986 · #5 · 2016年10月31日 4 个赞

如果想要全局自动化,在enviornment文件里设置

my_datetime_formats = { :default => "%Y-%m-%d %H:%M:%S" } 
my_date_formats = { :default => '%Y-%m-%d' } 

Time::DATE_FORMATS.merge!(my_datetime_formats)
Date::DATE_FORMATS.merge!(my_date_formats)
2575
darkbaby123 · #6 · 2016年11月02日

@flemon1986 正解。虽然可以改默认行为,但用自定义的格式更灵活且无风险。补个文档 ActiveSupport::TimeWithZone#to_s

96
xiaobai2 · #7 · 2016年11月02日

#5楼 @flemon1986 这个我怎么用呢?

18898
flemon1986 · #8 · 2016年11月02日 2 个赞

放initialiser文件里吧。。。

# config/initializers/time_formats.rb
my_datetime_formats = { :default => "%Y-%m-%d %H:%M:%S" } 
my_date_formats = { :default => '%Y-%m-%d' } 

Time::DATE_FORMATS.merge!(my_datetime_formats)
Date::DATE_FORMATS.merge!(my_date_formats)
24996
lilijreey · #9 · 2016年11月02日
2329
mingyuan0715 · #10 · 2016年11月03日
# 把这行放到init文件里
Time::DATE_FORMATS[:db2] = '%Y-%m-%d %H:%M:%S'

# 也可以覆盖默认的
Time::DATE_FORMATS[:default] = '%Y-%m-%d %H:%M:%S'

# 然后
created_at.to_s(:db2)
#或者
created_at.to_s
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册