当我提交表单时,我可以在帖子中看到发送日期。但是,它不保存日期。如果我做一个日期检查,它说它的格式不正确。这是我的日期选择器功能,它显示正常:
$j(function(){
$j("#mile_date").datepicker();
});
$ j是因为我也在使用原型,因此所有jquery调用都使用了noconflict变量。
这是帖子:
Parameters: {"utf8"=>"Γ£ô", "authenticity_token"=>"Fj4HW/B4EOan/vcPZLJ75TvWkRH4ZKSFsPLlQLSD0cI=", "mile"=>{"odometer"=>"", "trip"=>"428.2
", "gallons"=>"24.959", "note"=>"", "temperature"=>"", "date"=>"06/22/2011"}, "commit"=>"Create Mile"}
所以它发送日期很好,但rails似乎不喜欢格式。它将空值插入数据库。如果我使用带有下拉列表的默认日期字段提交它,则会发送此信息并保存正常:
Parameters: {"utf8"=>"Γ£ô", "authenticity_token"=>"Fj4HW/B4EOan/vcPZLJ75TvWkRH4ZKSFsPLlQLSD0cI=", "mile"=>{"odometer"=>"", "trip"=>"428.2
", "gallons"=>"24.959", "mpg"=>"17.156136063144", "note"=>"", "temperature"=>"", "date(1i)"=>"2011", "date(2i)"=>"6", "date(3i)"=>"22"}, "c
ommit"=>"Create Mile"}
在insert语句中,它将日期插入为:'2011-06-22'
Rails是否期望3个变量中的日期正确构造日期格式?如何让datepicker发送正确的日期格式?
提前谢谢你,
答案 0 :(得分:37)
我遇到了同样的问题。一种解决方案是简单地更改datepicker使用的格式:
// in your javascript...
$j(function(){
$j("#mile_date").datepicker({
dateFormat: "yy-mm-dd"
});
});
Rails似乎能够处理yy-mm-dd格式 - 我正在使用它并且没有将日期保存到数据库的问题。这里唯一的问题是有些人可能会发现yy-mm-dd格式看起来不像mm / dd / yyyy ......
答案 1 :(得分:20)
正如@BaronVonBraun所指出的,rails似乎没有处理这种格式。按照他的建议改变它。但是,对于那些想要与yy-mm-dd不同的格式的人,可以使用以下内容。当rails获得所需的格式时,用户会看到您想要的格式。
$j(function(){
$j("#show_date").datepicker({altField: '#mile_date', altFormat: 'yy-mm-dd'});
});
show_date是他们看到的字段的id,而mile_date是一个隐藏字段,其中包含日期rails需要。
答案 2 :(得分:1)
如果有人使用jquery_datepicker gem,您将需要在rails视图中使用类似于以下代码的内容。
<%= form.hidden_field(:ship_date, :id => "ship_date") %>
<%= datepicker_input(:show_date, item.id, :size => 10, altField: "#ship_date", altFormat: 'yy-mm-dd', :value => item.ship_date.strftime("%m/%d/%Y"))%>
您还可以使用form.datepicker_input
将日期选择器直接附加到表单,但在我的用例中,我希望日期选择器能够反映Rails不接受的本地化日期。所以我添加了一个隐藏的表单元素并为其设置备用字段,完美运行!
答案 3 :(得分:0)
或尝试delocalize gem:https://github.com/clemens/delocalize
答案 4 :(得分:0)
j('.jquery-calendar').datepicker().each(function(){
// convert dates from db to US format
var $input = j(this)
var found = $input.val().match(/^(\d{4})-(\d{2})-(\d{2})$/);
if(found){
$input.val(found[2]+'/'+found[3]+'/'+found[1]);
}
});
答案 5 :(得分:0)
当我知道我以mm-dd-yy格式提供服务器日期时,有点hacky但直接帮助了设置事项
def convert_to_y_m_d(date)
new_date = date.split("-")[2] + "-" + date.split("-")[0] + "-" + date.split("-")[1]
new_date
end