JavaScript Intl.RelativeTimeFormat — «3 дні тому» без бібліотек
Intl.RelativeTimeFormat формує відносний час: «3 дні тому», «за годину», «минулого тижня».
Загальний опис
Саме заради цього роками тягнули цілі бібліотеки — а воно вбудоване й важить нуль байтів.
Знак числа задає напрямок: від'ємне — минуле («3 дні тому»), додатне — майбутнє («за 3 дні»).
Опція numeric: 'auto' вмикає найприємніше: замість «1 день тому» вона скаже «вчора», а замість «0 днів тому» — «сьогодні». Без неї фрази виходять механічними.
Саму різницю в днях чи годинах доводиться рахувати самому — метод форматує, а не обчислює.
автор: NagarD
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| RelativeTimeFormat | 71+ | 65+ | 14+ | 58+ | 79+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| RelativeTimeFormat | 71+ | yes | yes | 14+ |
Приклади
+ запропонувати свій приклад у пісочниці
«Вчора» замість «1 день тому» — і власний помічник.
const rtf = new Intl.RelativeTimeFormat('uk-UA', { numeric: 'auto' });
console.log(rtf.format(-1, 'day')); // 'вчора' — а не «1 день тому»
console.log(rtf.format(-3, 'day')); // '3 дні тому'
console.log(rtf.format(2, 'hour')); // 'за 2 години'
// різницю рахуємо самі
function ago(date) {
const seconds = (date - Date.now()) / 1000;
if (Math.abs(seconds) < 3600) {
return rtf.format(Math.round(seconds / 60), 'minute');
}
if (Math.abs(seconds) < 86400) {
return rtf.format(Math.round(seconds / 3600), 'hour');
}
return rtf.format(Math.round(seconds / 86400), 'day');
}
Коментарі
Коментарів ще немає — будьте першим!