#javascript #sorting #date #date-sorting
#javascript #сортировка #Дата #сортировка по дате
Вопрос:
В настоящее время у меня есть даты, отформатированные следующим образом:
[ [ Tue Jun 17 2014 09:00:00 GMT-0400 (EDT),
Tue Jun 17 2014 10:00:00 GMT-0400 (EDT) ] ]
[ [ Thu Jun 19 2014 09:30:00 GMT-0400 (EDT),
Thu Jun 19 2014 11:30:00 GMT-0400 (EDT) ] ]
[ [ Tue Jun 17 2014 10:00:00 GMT-0400 (EDT),
Tue Jun 17 2014 11:00:00 GMT-0400 (EDT) ] ]
Эти даты на самом деле являются «сеансами», и мне нужно увидеть, где определенные сеансы находятся рядом друг с другом. Например, в этом конкретном случае время окончания первого массива дат равно 10 утра, а время начала последнего массива дат равно 10 утра. Как я могу вычислительно найти эту ситуацию?
Единственный подход, который у меня есть, — это сначала отсортировать наборы массивов от самого раннего времени до самого последнего времени, а затем сравнить каждую из пар даты начала / окончания, чтобы увидеть, совпадают ли они, но, похоже, я не могу это сделать. Любые идеи приветствуются!
Комментарии:
1. Если две даты точно совпадают, то их значения в ms должны совпадать. Что вы уже пробовали до сих пор?
2. Прямо сейчас я предпринимаю попытку, в ходе которой я перебираю даты, чтобы найти совпадения, и подумал, что мог бы просто попробовать сравнить сами объекты date. Я попробую получить их значения MS и сравнить их! @elclanrs
3. Объекты разные, но значения должны быть одинаковыми jsbin.com/qipos/1/edit
Ответ №1:
Превратите строки в временные метки Unix с Date.parse()
помощью (если это на самом деле Date
объекты, тогда используйте .getTime()
метод), а затем упорядочите сеансы с Array.prototype.sort()
помощью . Вот пример, в котором сеансы упорядочены по времени начала:
var sessions = [
["Tue Jun 17 2014 09:00:00 GMT-0400 (EDT)", "Tue Jun 17 2014 10:00:00 GMT-0400 (EDT)"],
["Thu Jun 19 2014 09:30:00 GMT-0400 (EDT)", "Thu Jun 19 2014 11:30:00 GMT-0400 (EDT)"],
["Tue Jun 17 2014 10:00:00 GMT-0400 (EDT)", "Tue Jun 17 2014 11:00:00 GMT-0400 (EDT)"]
];
for (var i = 0; i < sessions.length; i ) {
sessions[i].startTime= Date.parse(sessions[i][0]);
}
sessions.sort(function(a, b) { return a.startTime-b.startTime; });