rails i18n日期问题

spa*_*pas 2 ruby ruby-on-rails internationalization

我们目前正在开发一个使用i18n的rails项目,我们的日期问题很小:

# on my mac
"10.06.2008".to_date 
# produces => Tue, 10 Jun 2008

# on a friends mac and on the production server
"10.06.2008".to_date
# produces => ..., 06 Oct 2008
Run Code Online (Sandbox Code Playgroud)

如您所见,日期不对.我们检查了一切.locale.yml(de.yml)在两个系统上都很好,并且也设置了default_locale.我们系统之间的唯一区别是ruby版本.我正在运行ruby 1.8.7并且他运行1.8.6.这可能是这种行为的原因吗?

任何帮助,将不胜感激.

mol*_*olf 11

是的,Ruby版本是不同的.内部String#to_date调用Date._parse,返回Ruby 1.8.6和1.8.7的不同结果.

1.8.7:

require "date"
Date._parse("10.06.2008")
#=> {:year=>2008, :mday=>10, :mon=>6}
Run Code Online (Sandbox Code Playgroud)

1.8.6:

Date._parse("10.06.2008")
#=> {:mday=>6, :mon=>10, :year=>2008}
Run Code Online (Sandbox Code Playgroud)

1.8.7更改日志提到了对日期解析方式的更改:

Date.parse: '##.##.##'(其中每个'#'是一个数字)现在被视为'YY.MM.DD'而不是'MM.DD.YY'.虽然更改可能会让您感到困惑,但是当您知道要处理的内容时,可以始终使用Date.strptime().

尽管未明确提及您示例中的四位数版本,但相同的更改可能会导致差异.解决方法是使用Date.strptime.