在 /initializers/time_formats.rb 我有这个:
Time::DATE_FORMATS[:profile] = "%m / %d / %Y"
然而,这显然会产生日期,例如:09 / 08 / 2001
谷歌告诉我我最好的选择是使用某种 gsub 正则表达式来编辑掉 0。这是真的还是有更好的选择?
在 /initializers/time_formats.rb 我有这个:
Time::DATE_FORMATS[:profile] = "%m / %d / %Y"
然而,这显然会产生日期,例如:09 / 08 / 2001
谷歌告诉我我最好的选择是使用某种 gsub 正则表达式来编辑掉 0。这是真的还是有更好的选择?
@date = Time.new
@date.month #=> 10
@date.day #=> 7
@date.year #=> 2009
如果您想对某些部分使用格式字符串,您可以执行以下操作:
@date.strftime("%B #{@date.day.ordinalize}, %Y") #=> October 7th, 2009
您可能可以使用 '%e' 来获取没有前导零的天数;然而,'strftime()' 的手册页 - 通常是这些基于时间的转换的基础 - 在几个月内没有显示这样做的方法,因此正则表达式解决方案可能是一种方法,尽管可能还有其他方法更多 Ruby 惯用的方法来实现等效的结果。
您可以使用 lambda/proc 作为 Time::DATE_FORMATS 中的格式,例如
Loading development environment (Rails 2.3.4)
>> Time::DATE_FORMATS[:my_format] = lambda { |time| "#{time.day}/#{time.month}/#{time.year}" }
=> #<Proc:0x000000010341a2e0@(irb):3>
>> 2.months.ago.to_s(:my_format)
=> "8/8/2009"
请注意,默认 Time::DATE_FORMATS 对:long_ordinal
和:rfc822
格式都使用 lambda。