JavaScript Pretty Date Time Ago Russian. Форматирование даты в период с момента публикации

Категория: JavaScript

Простая JavaScript функция для форматирования даты в период, прошедший от указанной даты. Например: 17 часов назад, сегодня, вчера, 4 дня назад, 9 часов назад, 26 апреля. Используется плюрализация минут, часов, дней, месяцев.

Библиотеки

Найденные библиотеки и решения для форматирования даты в строку периода.

momentjs

http://momentjs.com

Примеры:

moment("20111031", "YYYYMMDD").fromNow(); // 5 лет назад
moment().startOf('day').fromNow();        // 19 часов назад
moment().startOf('hour').fromNow();       // час назад
moment().endOf('day').fromNow();          // через 5 часов

Momentjs - это отличная библиотека! Но я не мог позволить себе загрузить 64.2Kb кода (16.6Kb без локализации).

sugarjs.com

https://sugarjs.com/download/

Примеры:

Sugar.Date('2017-04-26 19:10').relative().raw; // 12 minutes ago
Sugar.Date.setLocale('ru', {});
Sugar.Date('2017-04-26').relative().raw;          // 19 часов назад
Sugar.Date('2017-04-26 19:47:00').relative().raw; // 11 секунд назад

Первые впечатления: "Интересная библиотека", позволяет создать кастомный билд необходимого функционала. В итоге, оказалось, что у билдела есть серьезные проблемы с зависимостями - он не выбирает автоматом функции, от которых зависят ф-ции выбранные вручную! Я столкнулся с ошибками: "Sugar.Date.relative is not a function", "Cannot read property 'replace' of undefined", "Uncaught TypeError: Invalid Locale: ru".. Гугл ничего не подсказал по сборке SugarJS date relative билда. На голой интуиции (методом тыка) я все же сформировал минимально необходимые зависимости для работы ф-ции Sugar.Date.relative() с русской локалью:

  • Date: relative, create, addLocale, setLocale
  • Date Locales: Russian

Вес билда: sugar-custom.js 124.9Kb, sugar-custom.min.js 30.7Kb. Так-то и дофига..

JavaScript функция

После того, как я посетил страницу Джона Резига, где он описал реализацию функции prettyDate(), я решил написать собственную функцию, которая будет только форматировать переданную дату формата Y-m-d H:i в строку периода прошедшего с этого времени. И ничего лишнего.

В итоге исходник с JavaScript функцией prettyTimeAgoRu() весит 2.2Kb, минифицированная версия ~1Kb, билд с jQuery плагином 1.2Kb.

Примеры использования:

<time datetime="2017-04-26 00:00">
  <script>document.write(prettyTimeAgoRu('2017-04-26 17:20'));</script>
</time>
<time class="jsPrettyTimeAgoRu">2017-04-25</time>

#javascript pretty date time ago, #javascript pretty russian period

категория: JavaScript