Какой самый чистый способ удалить начальные "0" из дат по умолчанию в Ruby / Rails? - PullRequest
0 голосов
/ 07 октября 2009

В /initializers/time_formats.rb у меня есть это:

Time::DATE_FORMATS[:profile] = "%m / %d / %Y"

Однако это, очевидно, приводит к таким датам, как: 09/08/2001

Google говорит, что лучше всего использовать регулярное выражение gsub для редактирования нулей. Это правда или есть лучшая альтернатива?

Ответы [ 3 ]

2 голосов
/ 07 октября 2009
@date = Time.new
@date.month #=> 10
@date.day   #=> 7
@date.year  #=> 2009

если вы хотите использовать форматную строку для некоторых частей, вы можете сделать что-то вроде:

@date.strftime("%B #{@date.day.ordinalize}, %Y") #=> October 7th, 2009
1 голос
/ 07 октября 2009

Возможно, вы могли бы использовать "% e", чтобы получить номер дня без начального нуля; однако страница справочника для strftime (), которая обычно лежит в основе этих преобразований, основанных на времени, не показывает способа сделать это в течение нескольких месяцев, поэтому решение regex, возможно, является одним из способов сделать это, хотя могут быть и другие Руби-идиоматические способы достижения эквивалентного результата.

0 голосов
/ 08 октября 2009

Вы можете использовать лямбда / 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.

...