问题所在
mm/dd/yyyy格式插入日期。dd/mm/yyyy格式的日期。示例
03/12/2012,Rails将其解释为2012年12月3日。03/20/2012放入Rails,Rails将其解释为2012年第20个月的第三天。由于这个日期不存在,Rails将其转换为一个nil值(我认为)。问题
如何在解析此日期文本字段时更改Rails使用的日期格式?
备注:
1)我不想更改数据采集器插入到文本字段的日期的格式,
2)我并不是要求在视图中显示我的日期属性。
发布于 2013-03-25 04:18:20
我最初以为这可以通过Rails国际化特性来解决,但事实证明我错了。
从Ruby1.9开始,用于数据解析的标准格式是dd/mm/yyyy,以便更好地容纳国际用户。更多细节可以在这就是答案中找到。
该标准在Rails中得到维护,因为Date.parse现在用于处理来自表单输入的数据。使用before_validation回调将无法工作,因为回调方法将以nil的形式接收字段。
现在有两个处理这个特定问题的宝石,即Rails中的日期解析不遵循来自I18n.locale的区域设置。两者似乎都很好。
发布于 2013-03-25 01:34:29
由于您不想更改选择器的格式,我建议您在实际的模型属性中使用一个隐藏字段。
例如,假设您像往常一样使用表单生成器,为模型的date属性添加一个隐藏字段:
f.hidden_field :date
然后,对于选择文本输入,不要将其绑定到模型的date属性。假设隐藏字段具有ID 'modelname_date‘,选择器文本输入具有ID’date_ say‘,请使用以下方法使其工作:
$(function(){
$("#date_picker").datepicker({altField: '#nodelname_date', altFormat: 'dd/mm/yyyy'});
});这样,日期选择器将日期显示为'mm/dd/yyyy‘,但Rails将将日期显示为'dd/mm/yyyy’。
更新:
如果您想在Rails方面解决这个问题,我建议另一个解决方案:
attr_accessor :bad_format_datebefore_validation do
self.date = Date.strptime(bad_format_date, "%m/%d/%Y")
end然后,对于视图上的表单,使用bad_format_date,但是使用date字段值初始化它(如果它是编辑表单)。
https://stackoverflow.com/questions/15531786
复制相似问题