0

i want to sort date in ascending order in javascript function.i am having date in following format 3/4/2014 1300

im having follwing array which contains date

categoriesdata.push(RecordDate);
                        categoriesdata.sort(function (a, b) {
                            var key1 = a.RecordDate;
                            var key2 = b.RecordDate;

                            if (key1 < key2) {
                                return -1;
                            } else if (key1 == key2) {
                                return 0;
                            } else {
                                return 1;
                            }
                        })

categoriesdata have the following record

3/4/2014 1300
2/4/2014 0000
1/31/2014 1030

now i want to sort these record in such way so that i will get following output

1/31/2014 1030
2/4/2014 0000
3/4/2014 1300
shweta
  • 319
  • 2
  • 8
  • 21

2 Answers2

2

you have to split the date string and get the parts using regex or simple split

   var date = "1/31/2014 1030".split(" ");
   var day = parseInt(date[0].split["/"][0], 10);
   var month = parseInt(date[0].split["/"][1], 10) - 1;
   var year = parseInt(date[0].split["/"][2], 10);
   var hours = parseInt(date[1].slice(0,2), 10);
   var minutes = parseInt(date[1].slice(2,4), 10);

then create Date objects from them in javascript.

   var dateObj = new Date(year, month, day, hour);

then convert the dates to be compared to "milliseconds since beginning"

var milliseconds1 = Date.parse(dateObj)

similarly convert both dates to be compared in milliseconds, now you will have two numbers that can easily be compared

Incorporate this idea to your sort function.

categoriesdata.push(RecordDate);
categoriesdata.sort(function (a, b) {
    var key1 = a.RecordDate;
    var key2 = b.RecordDate;
    var getTimestamp = function (dateString) {
        var date = dateString.split(" ");
        var day = parseInt(date[0].split["/"][0], 10);
        var month = parseInt(date[0].split["/"][1], 10) - 1;
        var year = parseInt(date[0].split["/"][2], 10);
        var hours = parseInt(date[1].slice(0, 2), 10);
        var minutes = parseInt(date[1].slice(2, 4), 10);

        return Date.parse(new Date(year, month, day, hour));
    }
    key1 = getTimestamp(key1);
    key2 = getTimestamp(key2);
    if (key1 < key2) {
        return -1;
    } else if (key1 == key2) {
        return 0;
    } else {
        return 1;
    }
})
sabithpocker
  • 15,274
  • 1
  • 42
  • 75
0

Best way is to convert it to a date type. And after sorting convert it back to the string you want

For sorting dates there are plenty of solutions. Read this Sort Javascript Object Array By Date

Community
  • 1
  • 1
Arno
  • 514
  • 5
  • 13