【问题标题】:Add days to a date from one bootstrap datetimepicker and mirror to another?从一个引导程序 datetimepicker 将日期添加到日期并镜像到另一个?
【发布时间】:2013-06-30 20:36:18
【问题描述】:

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

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

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

【问题讨论】:

    标签: jquery twitter-bootstrap datetimepicker


    【解决方案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')) {
    
            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

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

    【讨论】:

      【解决方案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);
      

      Fiddle here

      【讨论】:

      • 谢谢,我试过了,但是当浏览器尝试转换为 ISO 字符串时出现 JS 错误。
      • 已更新 - 不知道您应用到输入字段的格式。此编辑后的答案不使用 ISO 字符串...
      【解决方案3】:

      在 mccannf 朝着正确的方向稍加推动后,我得到了这个工作,这是我完成的代码 sn-p:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          到目前为止,我建议使用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);
          

          Fiddle

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-20
            • 2017-03-07
            • 1970-01-01
            • 2017-12-24
            • 2017-07-30
            • 1970-01-01
            相关资源
            最近更新 更多