Rails reverses day and month when saving DateTimePicker form field
我正在尝试在RubyonRails5.2应用程序上以RubyonRails5.2的形式使用tempusDomiusBootstrap4,这样用户就可以选择一个日期。代码如下:
应用程序/视图/事件/u form.html.erb
1 2 3 4 5 | <%= f.label :starts_at, 'Start Date and Time', class: 'control-label' %> <%= f.text_field(:starts_at, class:"form-control datetimepicker-input", data: {target:"#datetimepicker1"}) %> <i class="fas fa-calendar-plus"> |
应用程序/资产/javascripts/events.js
1 2 3 | $(function () { $('#datetimepicker1').datetimepicker(); }); |
应用程序/控制器/事件控制器.rb
1 2 3 4 5 6 7 8 9 | 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日。当我在表单提交后查看
如何告诉Ruby在将月份转换为日期对象时,月份是第一个?在保存之前,我可以在控制器中做些什么吗?
您可以告诉Ruby如何读取时间字符串:
1 | DateTime.strptime('06/09/2018', '%m/%d/%Y') |
你可以在这个答案中看到更多的细节。
编辑:
此外,还可以在此处设置默认日期格式:
将此添加到config/initializers/date_time.rb
1 | Date::DATE_FORMATS[:default] ="%m/%d/%Y" |
我发现您可以将日期格式更改为一个Ruby正确理解的格式,并且用户很容易阅读。将javascript更改为:
1 2 3 4 5 | $(document).on('turbolinks:load', function() { $('#datetimepicker1').datetimepicker( 'format', 'MMMM D, YYYY h:mm A' ); }); |
这将向用户显示日期为2018年6月9日下午6:30。日期格式来自moment.js http://moment js.com/docs//displaying/format/,但添加到tempus dominus的格式选项中。
附带说明,要让tempus dominus boostrap 4在rails中工作,还必须加载moment.js。要么调用cdn,要么添加momentjs rails gem。如果后者出现在application.js文件中,则需要它,如下所示:
1 2 3 4 | # app/assets/javascripts/application.js ... //= require moment //= require tempusdominus-bootstrap-4.js |