Rails 日期选择器日期时间的有效格式
Posted
技术标签:
【中文标题】Rails 日期选择器日期时间的有效格式【英文标题】:Rails Date Picker Valid Format for datetime 【发布时间】:2016-01-04 22:55:18 【问题描述】:我的表中有两列,start_date 和 end_date,它们的类型都是 datetime。我正在尝试将 text_field 与 jQuery gem bootstrap-datepicker-rails 一起使用,让用户从一个小弹出日历中选择日期。问题是返回的日期不是 Ruby 期望的格式,因此您最终可能会得到违反模型验证的无效日期。例如,选择 2015 年 10 月 7 日(即 2015 年 10 月 7 日)作为开始日期和 2015 年 10 月 30 日(2015 年 10 月 30 日)会返回两个错误:1)结束日期不能为空,2)开始日期必须在之前。
我认为这是因为它实际上以不同的格式解释第二个日期,并且由于一年中显然没有第 30 个月,因此它无法解析日期。我可以通过启动 rails 控制台并尝试手动输入日期来测试这个假设。例如,project = Project.new(number: 7, account_manager: "Test", customer: "Test", start_date: "10/7/2015".to_datetime, end_date: "10/30/2015")
返回以下内容:=> #<Project number: 7, name: nil, customer: "Test", created_at: nil, updated_at: nil, start_date: "2015-07-10 00:00:00", end_date: nil, account_manager: "Test">
。 请注意 end_date 字段为零。
我想我看到了问题的症结所在,但我正在努力让它发挥作用。我可以看到 Rails 需要以某种方式将输入为 2015 年 10 月 30 日的日期解释为 2015 年 10 月 30 日,然后将其转换为适当的格式,然后再将记录保存到数据库中。谁能帮我克服这个绊脚石?
这是项目模型。 类项目
这是项目/新视图。
<h1>Create New Project</h1>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(@project) do |f| %>
<%= render 'shared/error_messages' %>
<%= f.label :number, 'Project Number' %>
<%= f.text_field :number, class: "form-control" %>
<%= f.label :account_manager %>
<%= f.text_field :account_manager, class: "form-control" %>
<%= f.label :customer %>
<%= f.text_field :customer, class: "form-control" %>
<%= f.text_field :start_date, class:"datepicker", :value=> (@project.start_date && @project.start_date.strftime("%m-%d-%Y")), placeholder:"Start Date" %>
<%= f.text_field :end_date, class:"datepicker", :value => (@project.end_date && @project.end_date.strftime("%m-%d-%Y")), placeholder:"End Date" %>
<br>
<%= f.submit "Create project", class: "btn btn-primary" %>
<% end %>
</div>
</div>
<script type="text/javascript">
$(document).ready(function()
$('.datepicker').datepicker(todayHighlight: true, orientation: 'auto top');
);
</script>
最后,我知道已经有几个关于这个问题的问题(例如,"Rails 3.1 text_field form helper and jQuery datepicker date format"),但我很难找到工作的答案,无论是由于我自己的经验不足还是 Rails 框架的变化,因为一些较早的问题得到了解答。
【问题讨论】:
【参考方案1】:尝试将您的日期选择器切换为使用yyyy-mm-dd
格式:
http://bootstrap-datepicker.readthedocs.org/en/latest/options.html#format
例子:
$(document).ready(function()
$('.datepicker').datepicker(
todayHighlight: true,
orientation: 'auto top',
format: 'yyyy-mm-dd'
);
);
【讨论】:
以上是关于Rails 日期选择器日期时间的有效格式的主要内容,如果未能解决你的问题,请参考以下文章