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

lilijreey · October 31, 2016 · Last by mingyuan0715 replied at November 03, 2016 · 2228 hits

大家好,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
You need to Sign in before reply, if you don't have an account, please Sign up first.