Как сделать фильтр диапазона дат на jquery datatables? - PullRequest
0 голосов
/ 13 октября 2018

Я использую таблицы данных jquery.Я делаю фильтр диапазона дат на нем.Когда я выбираю минимальную дату и максимальную дату, результат не фильтруется в таблицах данных.Я использовал скрипт

$(document).ready(function() {

  var table1 = $('#sample_2').DataTable({
    dom: 'Bfrtip',
    buttons: [
      'copy', 'csv', 'excel', 'pdf', 'print',
    ]
  });

  $.fn.dataTable.ext.search.push(
    function(settings, data, dataIndex) {
      //var min = $('#min').datepicker("getDate");
      // var max = $('#max').datepicker("getDate");
      var min = $('#min').datepicker({
        dateFormat: 'yyyy-mm-dd'
      }).val();
      var max = $('#max').datepicker({
        dateFormat: 'yyyy-mm-dd'
      }).val();
      //console.log(min);
      console.log(min);
      console.log(max);
      //var startDate = new Date(data[4]);
      var today = new Date();
      var dd = today.getDate();
      var mm = today.getMonth() + 1; //January is 0!

      var yyyy = today.getFullYear();
      if (dd < 10) {
        dd = '0' + dd;
      }
      if (mm < 10) {
        mm = '0' + mm;
      }
      var today = yyyy + '-' + mm + '-' + dd;
      var startDate = today;
      console.log(startDate);

      if (min == null && max == null) {
        return true;
      }
      if (min == null && startDate <= max) {
        return true;
      }
      if (max == null && startDate >= min) {
        return true;
      }
      if (startDate <= max && startDate >= min) {
        return true;
      }
      return false;
    }
  );


  $("#min").datepicker({
    onSelect: function() {
      table1.draw();
    },
    changeMonth: true,
    changeYear: true
  });
  $("#max").datepicker({
    onSelect: function() {
      table1.draw();
    },
    changeMonth: true,
    changeYear: true
  });

  // Event listener to the two range filtering inputs to redraw on input
  $('#min, #max').change(function() {
    table1.draw();
  });
});

$(document).ready(function() {

  var table1 = $('#sample_2').DataTable({
    dom: 'Bfrtip',
    buttons: [
      'copy', 'csv', 'excel', 'pdf', 'print',
    ]
  });

  $.fn.dataTable.ext.search.push(
    function(settings, data, dataIndex) {
      //var min = $('#min').datepicker("getDate");
      // var max = $('#max').datepicker("getDate");
      var min = $('#min').datepicker({
        dateFormat: 'yyyy-mm-dd'
      }).val();
      var max = $('#max').datepicker({
        dateFormat: 'yyyy-mm-dd'
      }).val();
      //console.log(min);
      console.log(min);
      console.log(max);
      //var startDate = new Date(data[4]);
      var today = new Date();
      var dd = today.getDate();
      var mm = today.getMonth() + 1; //January is 0!

      var yyyy = today.getFullYear();
      if (dd < 10) {
        dd = '0' + dd;
      }
      if (mm < 10) {
        mm = '0' + mm;
      }
      var today = yyyy + '-' + mm + '-' + dd;
      var startDate = today;
      console.log(startDate);

      if (min == null && max == null) {
        return true;
      }
      if (min == null && startDate <= max) {
        return true;
      }
      if (max == null && startDate >= min) {
        return true;
      }
      if (startDate <= max && startDate >= min) {
        return true;
      }
      return false;
    }
  );


  $("#min").datepicker({
    onSelect: function() {
      table1.draw();
    },
    changeMonth: true,
    changeYear: true
  });
  $("#max").datepicker({
    onSelect: function() {
      table1.draw();
    },
    changeMonth: true,
    changeYear: true
  });

  // Event listener to the two range filtering inputs to redraw on input
  $('#min, #max').change(function() {
    table1.draw();
  });
});

Формат даты: гггг-мм-дд.Каждый раз, когда я ищу с диапазоном дат, результат не попадает в таблицы данных.Пожалуйста, помогите мне, где я делаю неправильно. Спасибо.

1 Ответ

0 голосов
/ 13 октября 2018

На любом языке программирования вам следует избегать полного сравнения строк по датам.

Просто сравните даты друг с другом напрямую или, если необходимо, с их числовыми значениями.

Выуже попали в ловушку при использовании строк даты, поскольку вы используете '-' в одном и '/' в другом, который имеет другое значение ascii и, следовательно, другой> <порядок сортировки.Кроме того, порядок mm-dd-yyyy вместо yyyy-mm-dd тоже не поможет, если вам нужно варьироваться между разными годами. </p>

Намного лучше избежать преобразования их в строки дляСравнение вообще на первом месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...