4

I'm trying to sort some a data by date. the data is actually saved in HTML under a div --> span. However, I've made the following function but for some reason, it's not working on them as correct as I expect it to be.

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;

The 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 am I doing wrong in here will be very aprociated.

1 Answer 1

3

It seems like the parse not working to convert your date. However, I believe using localCompare would 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 it should work. it works on my test. Also look into the [localeCompare()][1] Method.

Sign up to request clarification or add additional context in comments.

1 Comment

Yes @DirWolf that code works perfect for me. it solved the problem. great work.!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.