DateRangePicker - 将范围选择与动态预设相结合

时间:2016-10-14 04:43:25

标签: javascript jquery daterangepicker

我在表单中使用DataRangePicker JS库来选择两个日期的范围。 DRP提供了一个按钮,其中包含一个预定义日期的下拉菜单,如昨天,今天,上个月等,但我希望在点击日期输入字段时将其与原始下拉窗口结合使用

DPR确实提供了一个设置生成器,可以执行此操作(在某种程度上),但只允许设置静态日期。我已经使用moment()函数将那些函数更改为按钮的动态范围,但无法将JS组合到一个函数中。我在这里做错了什么?

HTML

  <!-- Date and time range -->
  <div class="form-group">
    <label>Date and time range:</label>

    <div class="input-group">
      <div class="input-group-addon">
        <i class="fa fa-clock-o"></i>
      </div>
      <input type="text" class="form-control" name="daterangepicker" id="daterangepicker" />
    </div>
    <!-- /.input group -->

      <button type="button" class="btn btn-default pull-right" name="daterange-btn" id="daterange-btn" />
        <span>
          <i class="fa fa-calendar"></i> Date range picker
        </span>
        <i class="fa fa-caret-down"></i>
      </button>

  </div>
  <!-- /.form group --> 

输入字段的JS(工作)

$(function() {
    $('input[name="daterangepicker"]').daterangepicker({
        alwaysShowCalendars: true,
        showWeekNumbers: true,
        timePicker: true,
        timePicker24Hour: true,
        timePickerIncrement: 30,
        locale: {
            format: 'DD/MM/YYYY H:mm'
        }
    });

JS for button(工作)

$('input[name="daterange-btn"]').daterangepicker(
    {
      ranges: {
        'Today': [moment(), moment()],
        'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
        'Last 7 Days': [moment().subtract(6, 'days'), moment()],
        'Last 30 Days': [moment().subtract(29, 'days'), moment()],
        'This Month': [moment().startOf('month'), moment().endOf('month')],
        'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
      },
      startDate: moment().subtract(29, 'days'),
      endDate: moment()
    },
    function (start, end) {
      $('#daterange-btn span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
    }
)

组合JS用于输入字段(不工作)

  <script type="text/javascript">
    //Date range picker with time picker
    $(function() {
        $('input[name="daterangepicker"]').daterangepicker({
            alwaysShowCalendars: true,
            showWeekNumbers: true,
            timePicker: true,
            timePicker24Hour: true,
            timePickerIncrement: 30,
            locale: {
                format: 'DD/MM/YYYY H:mm'
            },

            ranges: {
                'Today': [moment(), moment()],
                'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
                'Last 7 Days': [moment().subtract(6, 'days'), moment()],
                'Last 30 Days': [moment().subtract(29, 'days'), moment()],
                'This Month': [moment().startOf('month'), moment().endOf('month')],
                'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
              },
              startDate: moment().subtract(29, 'days'),
              endDate: moment()
            },

            function (start, end) {
              $('#daterangepicker').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
            }
        )                           
    });
    </script>

2 个答案:

答案 0 :(得分:1)

你错过了一些支架和错误的地方支架

  <script type="text/javascript">
    //Date range picker with time picker
    $(function() {
        $('input[name="daterangepicker"]').daterangepicker({
            alwaysShowCalendars: true,
            showWeekNumbers: true,
            timePicker: true,
            timePicker24Hour: true,
            timePickerIncrement: 30,
            locale: {
                format: 'DD/MM/YYYY H:mm'
            },
            { // here
                ranges: {
                    'Today': [moment(), moment()],
                    'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
                    'Last 7 Days': [moment().subtract(6, 'days'), moment()],
                    'Last 30 Days': [moment().subtract(29, 'days'), moment()],
                    'This Month': [moment().startOf('month'), moment().endOf('month')],
                    'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
                  },
                  startDate: moment().subtract(29, 'days'),
                  endDate: moment()
            },

            function (start, end) {
              $('#daterange-btn span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
            }                           
    });
}); // here
    </script>

答案 1 :(得分:0)

结果表明DRP语法正在处理&#34;范围&#34;以特殊方式对象并且不需要括号。 谢谢@AKZhang,他指出了丢失的括号。

以下代码对我有用:

  <script type="text/javascript">
    //Date range picker with time picker
    $(function() {
        $('input[name="daterangepicker"]').daterangepicker({
            alwaysShowCalendars: true,
            showWeekNumbers: true,
            timePicker: true,
            timePicker24Hour: true,
            timePickerIncrement: 30,
            ranges: {
                'Today': [moment(), moment()],
                'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
                'Last 7 Days': [moment().subtract(6, 'days'), moment()],
                'Last 30 Days': [moment().subtract(29, 'days'), moment()],
                'This Month': [moment().startOf('month'), moment().endOf('month')],
                'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
            },
            startDate: moment().subtract(29, 'days'),
            endDate: moment(),

            locale: {
                format: 'DD/MM/YYYY H:mm'
            },

            function (start, end) {
              $('#daterangepicker').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
            } 
        });
    }); // here
    </script>