我正在使用引导日期时间选择器(http://www.malot.fr/bootstrap-datetimepicker/)允许用户在一个字段中选择日期和时间,然后需要在最初选择的日期/时间后21天推荐一个日期第二场。
我想知道如何将这样的一个字段'镜像'到另一个字段,但添加X天?记录了一个允许镜像的功能,但我没有看到如何使用它来添加天数(http://www.malot.fr/bootstrap-datetimepicker/demo.php - 请参阅镜像场演示)。
即。将使用datetimepicker选择的日期作为字段A,并将其镜像到字段B'但是'将21天添加到日期并将其用作B字段的默认日期?
答案 0 :(得分:3)
使用这里提供的代码mccannf就是我现在所拥有的:
var pickerOptsGeneral = {
format: "dd/mm/yyyy",
autoclose: true,
minView: 2,
maxView: 2
};
$("input.datepicker").datetimepicker(pickerOptsGeneral).on('changeDate', function(ev){
if ($(this).hasClass('linked')) {
var startfield = this.name;
var endfield = startfield.replace("Start", "End");
var startDate = (new Date(ev.date)) + 21;
console.log(startDate);
endfield.val(startDate.toISOString());
endfield.datetimepicker('update');
}
});
和我的标记:
<input type="text" placeholder="00/00/0000" value="" id="pStartDate1" name="fpStartDate1" maxlength="10" class="datepicker linked">
我试图创造一个小提琴,但悲惨地失败了! :/
当我将“StartDate”回显到屏幕时,它显示为:
Tue Jul 02 2013 10:16:24 GMT + 0100(BST)21
我猜测可能是问题的原因,这似乎不是一个可以以任何方式转换为有效日期的值。 :
答案 1 :(得分:2)
尝试这样的事情:
var pickerOptsGeneral = {
format: "dd/mm/yyyy",
autoclose: true,
minView: 2,
maxView: 2
};
$('#firstDate')
.datetimepicker(pickerOptsGeneral)
.on('changeDate', function(ev){
var oldDate = new Date(ev.date);
var newDate = new Date();
newDate.setDate(oldDate.getDate() + 21);
secondDate.val(newDate.getDate()+"/"+(newDate.getMonth()+1)+"/"+newDate.getFullYear());
secondDate.datetimepicker('update');
});
var secondDate = $('#secondDate').datetimepicker(pickerOptsGeneral);
答案 2 :(得分:1)
在mccannf的正确方向上有点刺激我得到了这个工作,这是我完成的代码片段:
var pickerOptsGeneral = {
format: "dd/mm/yyyy",
autoclose: true,
minView: 2,
maxView: 2
};
$("input.datepicker").datetimepicker(pickerOptsGeneral).on('changeDate', function(ev){
if ($(this).hasClass('linked')) {
// Get field name
var startField = this.name;
var endField = startField.replace("Start", "End");
// Get start date and add 21 days
endDate = new Date(ev.date);
endDate.setDate(endDate.getDate() + 21);
endDateString = ('0' + endDate.getDate()).slice(-2) + '/'
+ ('0' + (endDate.getMonth()+1)).slice(-2) + '/'
+ endDate.getFullYear();
// Set end date
$('input[name='+endField+']').val(endDateString);
}
});
答案 3 :(得分:0)
onchange获取firstpicker日期并设置为第二个选择器。 上面的答案变化不大!!!!
$('firstPicker').on('dp.change', function(e){
endDate = new Date(e.date);
endDate.setDate(endDate.getDate() + 280);
var endDtae= ('0' + endDate.getDate()).slice(-2) + '/'
+ ('0' + (endDate.getMonth()+1)).slice(-2) + '/'
+ endDate.getFullYear();
$("secondpicker").val(endDtae)
})
答案 4 :(得分:0)
到目前为止,我将建议使用Moment.js库进行日期操作的类似解决方案。 该库的一些优点:
JS代码:
var pickerOptsGeneral = {
format: "dd/mm/yyyy",
autoclose: true,
minView: 2,
maxView: 2
};
$('#firstDate')
.datetimepicker(pickerOptsGeneral)
.on('changeDate', function(ev){
var oldDate = moment(ev.date);
var newDate = oldDate;
newDate.add(21, 'days'); // note that moment object is mutating
secondDate.val(newDate.format("DD/MM/YYYY")); // format is case sensitive
secondDate.datetimepicker('update');
});
var secondDate = $('#secondDate').datetimepicker(pickerOptsGeneral);