Sort by date using jquery & html

I am trying to sort data by date. data is actually stored in HTML under div -> span. However, I made the following function, but for some reason it does not work on them as correctly as I expect.

case "Import_Date_asc":
    var elems = $.makeArray($review_items);

    elems.sort(function(a, b) {
        var a_date = $(a).find('.panel-heading .data-source').text(),
            b_date = $(b).find('.panel-heading .data-source').text();

        a_date = a_date.split(' / ');
        a_date = a_date[1].split(' UTC');

        b_date = b_date.split(' / ');
        b_date = b_date[1].split(' UTC');

        console.log(a_date[0], b_date[0]);

        //return new Date(a_date[0]) > new Date(b_date[0]);
        return Date.parse(a_date[0]) > Date.parse(b_date[0]);
    });

    $review_container.html(elems);

    break;

case "Import_Date_desc":
  var elems = $.makeArray($review_items);

  elems.sort(function(a, b) {
      var a_date = $(a).find('.panel-heading .data-source').text(),
          b_date = $(b).find('.panel-heading .data-source').text();

      a_date = a_date.split(' / ');
      a_date = a_date[1].split(' UTC');

      b_date = b_date.split(' / ');
      b_date = b_date[1].split(' UTC');

      console.log(a_date[0], b_date[0]);

      //return new Date(a_date[0]) < new Date(b_date[0]);
      return Date.parse(a_date[0]) < Date.parse(b_date[0]);
  });

  $review_container.html(elems);

  break;

html looks like this:

<div class="review-item panel panel-primary" data-ldn="8643" data-pse="43460">
        <div class="panel-heading">
<span class="data-title">Dom(i23)</span>
<span class="data-source pull-right">Import / 2017-12-07 14:35 UTC</span>
</div></div>

please, if you know what I'm doing wrong, here will be very aprociated.

+4
source share
1 answer

Parsing does not seem to work to convert the date. However, I believe that using localCompare will work better

case "Import_Date_asc":
    var elems = $.makeArray($review_items);

    elems.sort(function(a, b) {
        var a_date = $(a).find('.panel-heading .data-source').text(),
            b_date = $(b).find('.panel-heading .data-source').text();

        a_date = a_date.split(' / ');
        a_date = a_date[1].split(' UTC');
        a_date = a_date[0];
        a_date = a_date.replace('-', '');
        a_date = a_date.replace('-', '');
        a_date = a_date.replace(' ', '');
        a_date = a_date.replace(':', '');

        b_date = b_date.split(' / ');
        b_date = b_date[1].split(' UTC');
        b_date = b_date[0];
        b_date = b_date.replace('-', '');
        b_date = b_date.replace('-', '');
        b_date = b_date.replace(' ', '');
        b_date = b_date.replace(':', '');

        return a_date.localeCompare(b_date);
    });

    $review_container.html(elems);

    break;

case "Import_Date_desc":
  var elems = $.makeArray($review_items);

  elems.sort(function(a, b) {
      var a_date = $(a).find('.panel-heading .data-source').text(),
          b_date = $(b).find('.panel-heading .data-source').text();

      a_date = a_date.split(' / ');
      a_date = a_date[1].split(' UTC');
      a_date = a_date[0];
      a_date = a_date.replace('-', '');
      a_date = a_date.replace('-', '');
      a_date = a_date.replace(' ', '');
      a_date = a_date.replace(':', '');

      b_date = b_date.split(' / ');
      b_date = b_date[1].split(' UTC');
      b_date = b_date[0];
      b_date = b_date.replace('-', '');
      b_date = b_date.replace('-', '');
      b_date = b_date.replace(' ', '');
      b_date = b_date.replace(':', '');

      return a_date.localeCompare(b_date) * -1;
  });

  $review_container.html(elems);

  break;

Try this code, I believe that it should work. he is working on my test. Also consider the method [localeCompare()][1].

+3
source

Source: https://habr.com/ru/post/1690451/


All Articles