Алгоритм нечеткой даты - PullRequest
32 голосов
/ 05 мая 2009

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

Я уверен, что должен быть нечеткий форматер даты с открытым исходным кодом, но я не могу его найти. В идеале я хотел бы что-то, используя NSDate (OSX / iPhone) и его средства форматирования, но это не сложный момент. Кто-нибудь знает, что средство форматирования нечеткой даты берет любой период времени относительно текущего и возвращает строку, подобную (но не ограничивающуюся):

  • несколько минут назад
  • за последние пять минут
  • ранее сегодня
  • сегодня утром
  • прошлой ночью
  • на прошлой неделе
  • в прошлую среду
  • в начале прошлого месяца
  • июнь прошлого года
  • пару лет назад

В идеальном мире я бы хотел, чтобы строка была как можно более насыщенной (т. Е. Возвращать случайные варианты слова «Только минуту назад», например, «только сейчас»).

Разъяснение. Я ищу что-то более тонкое, чем обычные клюшки и веревки. Я хочу, чтобы что-то, что знает, что «вчера» и «последняя среда» могут относиться к одному и тому же периоду, но только один является правильным, когда сегодня четверг.

Ответы [ 14 ]

0 голосов
/ 12 мая 2016

Проверьте Chrono для эвристического синтаксического анализатора Javascript.

Chrono поддерживает большинство форматов даты и времени, таких как:

Today, Tomorrow, Yesterday, Last Friday, etc
17 August 2013 - 19 August 2013
This Friday from 13:00 - 16.00
5 days ago
Sat Aug 17 2013 18:40:39 GMT+0900 (JST)
2014-11-30T08:15:30-05:30

https://github.com/wanasit/chrono

0 голосов
/ 05 мая 2009

У моей компании есть эта библиотека .NET , которая делает кое-что из того, что вы хотите, потому что она очень гибко разбирает дату и время (включая некоторые относительные форматы), но делает только не относительные выходные данные.

0 голосов
/ 05 мая 2009

Вы можете найти источник из timeago полезным. Описание плагина - это «плагин jQuery, который позволяет легко поддерживать автоматическое обновление нечетких временных отметок (например,« 4 минуты назад »или« около 1 дня назад »)."

Это, по сути, порт JavaScript функции Rail * distance_of_time_in_words, встроенный в плагин jQuery.

0 голосов
/ 05 мая 2009

Это почти всегда делается с использованием гигантского оператора switch и тривиально реализовать.

Имейте в виду следующее:

  • Всегда сначала проверяйте наименьший промежуток времени
  • Не забудьте сохранить локализацию ваших строк.
...