сортировка милые даты - PullRequest
0 голосов
/ 03 февраля 2012

Функция массива javascript .sort () может принимать необязательный параметр, который позволяет вам определять свой собственный оператор сравнения.Если вы не предоставите его, сравнение элементов будет применено по умолчанию при сортировке массива.например,

x = ['aaaaaaaa', 'bbbbb', 'x', 'dd', 'zzz']

["aaaaaaaa", "bbbbb", "x","dd", "zzz"]

x.sort ()

["aaaaaaaa", "bbbbb", "dd", "x", "zzz"]

x.sort (function (a, b) {return a.length> b.length? 1: -1})

["x", "dd", "zzz", "bbbbb", "aaaaaaaa"]

Во втором случае я сортирую по длине строки, а не по лексикографической сортировке по умолчанию.

Проблема:

У меня есть столбецЗначения на стороне клиента, представляющие хорошие даты, указанные в WebTwoPointZero.Эти значения могут быть отметкой даты - «18/01/2012» или любым из следующих:

  • Моменты назад
  • 1 минута назад
  • X минут назад
  • 1 час назад
  • X часов назад
  • Сегодня
  • Вчера
  • X дней назад

Iнужно уметь сортировать массив любой случайной комбинации этих значений.

1 Ответ

1 голос
/ 03 февраля 2012

Самой большой проблемой здесь является написание метода для преобразования относительного времени в абсолютное время.После написания метода, который может это сделать, вы можете отсортировать данные, сравнивая временные метки.

Чтобы написать такой метод, вам нужно будет каталогизировать и упорядочить все различные форматы, которые вы хотите использовать.принимаем.Определившись с форматами, вы можете написать серию регулярных выражений для их идентификации, использовать группы захвата для извлечения любых важных значений, а затем передать эти значения в функцию, которая будет добавлена ​​или вычтена из текущей даты и времени, на основе таких ключевых слов, как «до».'и' назад 'и расположение этих слов в фразе.

Несмотря на это, это невероятно сложный процесс.Веселитесь.

Существует также Stackoverflow вопрос по этому вопросу несколько лет назад.Там вы можете найти хороший совет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...