Я столкнулся с той же проблемой с моим тестом на огурец сегодня!
Проблема (как указал iain) в том, что Date::DATE_FORMATS[:long]
- это "%B %e, %Y"
. %e
, в соответствии с ri strftime
, дает заполненный пробелом номер дня:
%d - Day of the month, zero-padded (01..31)
%-d no-padded (1..31)
%e - Day of the month, blank-padded ( 1..31)
По умолчанию это то, что я вижу в Rails 3.1.3:
> d = '2012-02-01'.to_date
=> Wed, 01 Feb 2012
> d.to_s(:long)
=> "February 1, 2012"
Как ни странно, Rails использует другой формат дня для :long
формата раз (%d
, что дает "01"
) как для даты (%e
, что дает " 1"
):
> d = '2012-02-01'.to_time
=> 2012-02-01 00:00:00 UTC
> d.to_s(:long)
=> "February 01, 2012 00:00"
> Time::DATE_FORMATS[:long]
=> "%B %d, %Y %H:%M"
> Date::DATE_FORMATS[:long]
=> "%B %e, %Y"
Тогда решение заключается в использовании "%-d"
для дня в строке формата вместо %e
:
> Date::DATE_FORMATS[:long] = "%B %-d, %Y"
=> "%B %-d, %Y"
> d = '2012-02-01'.to_date
Wed, 01 Feb 2012
> d.to_s(:long)
=> "February 1, 2012"
Вы можете просто добавить эту строку в новый инициализатор, config/initializers/date_formats.rb
:
Date::DATE_FORMATS[:long] = "%B %-d, %Y"
Прокомментируйте https://github.com/rails/rails/pull/1994, если вы хотите, чтобы это значение по умолчанию было изменено в Rails.