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

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

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

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

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

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

全局的可以打 patch

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

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

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

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