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

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

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

共收到 10 条回复
121

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

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

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

9442

全局的可以打patch

18898

如果想要全局自动化,在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

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

96

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

18898

放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)
2329
# 把这行放到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
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册