Вот версия, которая использует date-fns и создает собственный фильтр
https://codesandbox.io/s/mmm0q9r61x
это код самого фильтра
import Vue from "vue";
import { differenceInMonths, differenceInYears } from "date-fns";
Vue.filter("tsDiff", (from, to) => {
const tsTo = to || new Date();
try {
// return `${distanceInWords(from, tsTo)}`;
let y = differenceInYears(from, tsTo);
let m = differenceInMonths(from, tsTo) - y * 12;
let r = [];
if (y !== 0) {
r.push(`${Math.abs(y)} Year${Math.abs(y) !== 1 ? "s" : ""}`);
}
if (m !== 0) {
r.push(`${Math.abs(m)} Month${Math.abs(m) !== 1 ? "s" : ""}`);
}
r = r.join(" and ");
if (y < 0 || m < 0) {
r = r + " ago";
} else {
r = "In " + r;
}
return r;
} catch (error) {
// eslint-disable-next-line
console.error(error);
return "Invalid Date";
}
});
как только вы импортируете фильтр (import './datefilter';
), вы можете звонить из любого места как {{ myDate | tsDiff }}
вы можете настроить использование по мере необходимости.
Вы можете легко заменить использование differenceInYears
и differenceInMonths
на vanilla js, так что вам вообще не понадобится зависимость.
В качестве примечания обратите внимание, можете ли вы заменить моментальные значения на date-fns. Momentjs - хорошая библиотека, но вы должны загрузить всю библиотеку независимо от того, сколько вы используете. Однако, когда вы используете Date-fns, вы можете указать, какие части вы хотите использовать, и только те, которые будут добавлены в окончательную сборку. Это может значительно сэкономить на окончательном размере сборки.