Datepicker选择日期格式为Rails后端

时间:2017-08-26 04:21:49

标签: ruby-on-rails activerecord datepicker

我有一个Rails 4应用程序,我们必须向用户显示一个日期选择器,但显示的选定日期应为MM-DD-YYYY格式。将日期发送到Rails时,ActiveRecord无法识别格式,因为我知道它正在等待YYYY-MM-DD。验证失败(日期不存在)。

JS如下:

$("#some_date").datetimepicker
  pickTime: false
  format: 'MM-DD-YYYY'

(显示效果很好,出现了极好的日期选择器)。

然后是我的苗条模板:

= f.input :date, as: :string, label: false, input_html: { class: 'form-control', value: @visit.date.strftime('%m-%d-%Y') }
p.help-block MM-DD-YYYY

如果我将格式更改为YYYY-MM-DD它完美无缺,并且日期会按原样保存到PostgreSQL中,但在美国,日期通常显示为MM-DD-YYYY

我也不想太过介入辅助方法或从每个控制器上的html输入转换日期,所以PostgreSQL很高兴。我想知道是否有某种方式可以改变日期格式,因为它进入后端?

config/locales/en.yml内,我确实有:

date:
  formats:
     default: '%m/%d/%Y'

干杯!

2 个答案:

答案 0 :(得分:0)

Bootstrap datetimepicker似乎没有替代格式发送到服务器的选项。但是,如果你需要的只是一个日期选择器并且你不关心时间,你可以试试JQuery datepicker。它允许您发送一个dateFormat进行显示,并使用altFormat发送到服务器。

答案 1 :(得分:0)

在jquery中,有一个名为altFormat的字段可以使用。数据库列不包含时区信息,但时区隐式为UTC。您可以使用模型方法获得所需的格式。我可以使用模型方法解析特定格式,而不是以特定格式保存数据库。

def your_date
  self[:column_name].strftime("%m-%D-%Y")
end

并且您还希望在解析为格式之前根据用户时区更改时间。

user_record = db_query.your_date
current_user.zone.parse(user_record)

以下是一些可能对您有帮助的参考资料。

http://brendankemp.com/essays/dealing-with-time-zones-using-rails-and-postgres/ https://apidock.com/ruby/DateTime/strftime

PS:如果你发现其他更好的方式,请发帖。