JavaScript Pretty Date Time Ago Russian. Форматирование даты в период с момента публикации
Простая 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