Как сравнить даты, чтобы увидеть, где встречаются смежные времена?

#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; });