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 日期选择器日期时间的有效格式的主要内容,如果未能解决你的问题,请参考以下文章

EasyAdmin 3 日期时间选择器时间格式

best_in_place 日期选择器格式

Rails4 + Bootstrap,日期选择器未显示

引导日期时间选择器导轨

角度材料日期时间选择器更改显示日期时间的格式

Material UI 日期选择器 日期格式 React