我有一个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'
干杯!
答案 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:如果你发现其他更好的方式,请发帖。