1

我正在使用 Bootstrap 日期时间选择器 ( http://www.malot.fr/bootstrap-datetimepicker/ ) 允许用户在一个字段中选择日期和时间,然后需要在最初的 21 天后推荐一个日期在第二个字段中选择日期/时间。

我想知道如何像这样将一个字段“镜像”到另一个字段但增加 X 天?记录了一个允许镜像的功能,但我不知道如何使用它来添加天数(http://www.malot.fr/bootstrap-datetimepicker/demo.php - 请参阅镜像字段演示)。

即使用字段 A 的 datetimepicker 选择日期并将其镜像到字段 B '但是'将 21 天添加到日期并将其用作 B 字段的默认日期?

4

5 回答 5

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”时,它显示为:

2013 年 7 月 2 日星期二 10:16:24 GMT+0100 (BST)21

我猜这可能是问题的原因,这似乎不是一个可以以任何方式转换为有效日期的值。:?

于 2013-07-01T08:33:16.503 回答
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);

在这里提琴

于 2013-06-30T23:12:58.867 回答
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);
    }
});
于 2013-07-01T14:30:53.820 回答
0

截至目前,我建议使用Moment.js库进行日期操作的类似解决方案。这个库的一些优点:

  • 日期和时间操作的非常整洁的代码
  • 通用且非常高效的日期和时间转换和格式化
  • 良好的语言环境操作支持
  • 非常受欢迎,通常与其他软件包捆绑在一起(例如,Chart.js)
  • 免费分发(MIT 许可)

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);

小提琴

于 2019-11-20T10:04:55.740 回答
0

onchange 获取第一个选择器日期并设置为第二个选择器。上述答案的微小变化效果很好!!!!

$('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)
     })
于 2017-07-14T06:56:09.747 回答