Ruby on rails 什么是去除开头的最干净方法;0“';从Ruby/Rails中的默认日期算起?

Ruby on rails 什么是去除开头的最干净方法;0“';从Ruby/Rails中的默认日期算起?,ruby-on-rails,ruby,strftime,Ruby On Rails,Ruby,Strftime,在/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 如果要对某些零件使用

在/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
如果要对某些零件使用格式字符串,可以执行以下操作:

@date.strftime("%B #{@date.day.ordinalize}, %Y") #=> October 7th, 2009

您可能可以使用“%e”获取不带前导零的天数;然而,“strftime()”的手册页(通常是这些基于时间的转换的基础)在几个月内没有显示这样做的方法,因此正则表达式解决方案可能是一种方法,尽管可能还有其他更为Ruby惯用的方法来实现相同的结果。

您可能可以使用“%e”来获取不带前导零的日数;然而,“strftime()”的手册页面——通常是这些基于时间的转换的基础——在几个月内没有显示这样做的方法,因此正则表达式解决方案可能是实现这一点的一种方法,尽管可能有其他更具Ruby风格的方法来实现相同的结果。

您可以使用lambda/proc作为time::DATE\u格式的格式,例如

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"
加载开发环境(Rails 2.3.4)
>>时间::日期格式[:我的格式]=lambda{Time}“{Time.day}/{Time.month}/{Time.year}”
=> #
>>2.月前至(我的格式)
=> "8/8/2009"

请注意,默认的时间::日期\格式对
:long\u序数
:rfc822
格式都使用lambda。

您可以在时间::日期\格式中使用lambda/proc作为格式,例如:

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"
加载开发环境(Rails 2.3.4)
>>时间::日期格式[:我的格式]=lambda{Time}“{Time.day}/{Time.month}/{Time.year}”
=> #
>>2.月前至(我的格式)
=> "8/8/2009"

请注意,默认的Time::DATE\格式对
:long\u序数
:rfc822
格式都使用lambda。

这里的正则表达式有点不符合规则。在使用正则表达式之前,还有其他更直观的事情可以做。@smotchkiss-我将修改答案,以将正则表达式从“可能必要”中限定出来……这里的正则表达式将有点违背规则。在使用正则表达式之前,还有其他更直观的事情可以做。@smotchkiss-我将修改答案,使正则表达式符合“可能必要”…很好,因此我将这两个答案结合起来得到@date.strftime(“#{@date.month}/%e/%Y”)。strftime在几个月内都没有像%e这样的东西,这似乎有点愚蠢。我相信这是一个很好的理由,但考虑到时间的限制,我没有时间去考虑它。没有双关语的意思。好吧,也许吧。很好,所以我将这两个答案结合起来得到@date.strftime(“#{@date.month}/%e/%Y”)。strftime在几个月内都没有像%e这样的东西,这似乎有点愚蠢。我相信这是一个很好的理由,但考虑到时间的限制,我没有时间去考虑它。没有双关语的意思。好吧,也许吧。