0

我正在尝试在 Ruby on Rails 5.2 应用程序上以表单形式使用 Tempus Dominus Bootstrap 4,以便用户可以选择日期。这是代码:

应用程序/视图/事件/_form.html.erb

<div class='form-group'>
  <%= f.label :starts_at, 'Start Date and Time', class: 'control-label' %>
  <div class="input-group date" id="datetimepicker1" data-target-input="nearest">
    <%= f.text_field(:starts_at, class: "form-control datetimepicker-input", data: {target:"#datetimepicker1"}) %>
    <div class="input-group-append" data-target="#datetimepicker1" data-toggle="datetimepicker">
      <div class="input-group-text"><i class="fas fa-calendar-plus"></i></div>
    </div>
  </div>
</div>

应用程序/资产/javascripts/events.js

$(function () {
  $('#datetimepicker1').datetimepicker();
});

应用程序/控制器/events_controller.rb

  def create
    @event = Event.new(event_params)
    @event.user = current_user
    if @event.save
      redirect_to @event, notice: 'Event was successfully created.' 
    else
      render :new 
    end
  end

我想先提交月份格式。当我选择一个日期 2018 年 6 月 9 日并提交表单时,它将月份和日期反转保存到数据库中:2018 年 9 月 6 日。当我查看params表单提交后,格式是06/09/2018 6:00 PM月份在前,但 Ruby/Rails 将其转换为日期时间对象,假设日期为第一天。

在将其转换为日期对象时,如何告诉 Ruby 月份是第一个?我可以在保存之前在控制器中做一些事情吗?

4

2 回答 2

2

你可以告诉 Ruby 如何读取时间字符串:

DateTime.strptime('06/09/2018', '%m/%d/%Y')

您可以在此答案中看到更多详细信息。

编辑:

此外,您可以在此处设置默认日期格式:

将此添加到 config/initializers/date_time.rb

Date::DATE_FORMATS[:default] = "%m/%d/%Y" 
于 2018-05-16T07:21:54.243 回答
1

我发现您可以将日期格式更改为 Ruby 正确理解且用户易于阅读的格式。将 JavaScript 更改为:

$(document).on('turbolinks:load', function() {
  $('#datetimepicker1').datetimepicker(
    'format', 'MMMM D, YYYY h:mm A'
  );
});

这将向用户显示日期为 2018 年 6 月 9 日下午 6:30。日期格式来自 Moment.js http://momentjs.com/docs/#/displaying/format/,但添加到 Tempus Dominus 的格式选项中。

附带说明一下,要让 tempus dominus boostrap 4 在 Rails 中工作,您还必须加载 moment.js。调用 cdn 或添加 momentjs-rails gem。如果是后者,那么在您的 application.js 文件中您需要它,如下所示:

# app/assets/javascripts/application.js
...
//= require moment
//= require tempusdominus-bootstrap-4.js
于 2018-05-16T09:40:53.590 回答