我有一个表单,其中有一个日期选择器,显示格式为的日期:
'%m/%d/%Y'
问题是当我提交表单时,此格式不是有效日期,因此它不会在INSERT INTO / UPDATE上发送到数据库。
尽管如此,如果我以这种格式提交日期,它仍然有效:
'%Y-%d-%m'
我已经看到在将对象保存到数据库之前我可以执行类似的操作:
my_object.due_date = params[:content_date].to_date.strftime("%Y-%d-%m")
但由于我有多个日期字段和多个带日期字段的模型,我希望避免在任何地方执行 strftime()。
你有更好的解决方案吗?
答案 0 :(得分:0)
我正在使用gem 'momentjs-rails'
,因为日期时间选择器。
模型
#deadline is saved in the db
#this is the getter-setter for deadline_string
def deadline_string
deadline.to_datetime.iso8601
end
def deadline_string=(deadline_str)
self.deadline = deadline_str
end
形式
#new form
<div class="field form-group">
<%= f.label :deadline %>
<%= f.text_field :deadline, class: "form-control new-task-deadline" %>
</div>
#edit form
<div class="field form-group">
<%= f.label :deadline %>
<%= f.text_field :deadline_string, class: "form-control edit-task-deadline" %>
</div>
保存到db时的js
$('.new-task-submit').on('click', function (e){
e.preventDefault();
var localMoment = moment($('.new-task-deadline').val());
$('.new-task-deadline').val(localMoment.toISOString());
$('#newtask').submit();
});
$(document).on('click', '.edit-task-submit', function (e){
e.preventDefault();
var deadlineField = $('.edit-task-deadline');
var localMoment = moment(deadlineField.val());
var railsDate = localMoment.toISOString();
deadlineField.val(railsDate);
$(".task-update-form").submit();
});
js在get请求中显示不错的数据
//setting time and datetimepicker when opening edit task modal
$(document).on('shown.bs.modal', '#update-task-modal', function (e) {
var deadlineField = $('.edit-task-deadline');
var deadlineValue = deadlineField.attr('value');
var momentDeadline = moment(deadlineValue).format('MM/DD/YYYY hh:mm A');
deadlineField.val(momentDeadline);
deadlineField.datetimepicker({
sideBySide: true,
format: 'MM/DD/YYYY hh:mm A',
stepping: 15,
widgetPositioning: { vertical: 'bottom' }
});
});