Return 字符串:'Days' 或 'Months' 或 'Years' 基于天数

Return string: 'Days' or 'Months' or 'Years' based on N of days

我在 vue 3 上使用 moment.js。 我有一个函数 returns 两个 dates 的差值。这是有效的,但它与我的问题有关。函数是这样写的:

methods: {
    getDateDifference (date) {
        var date = moment(date, 'YYYY MM DD')
        var today = moment()
        return today.diff(date, 'days')
    } 
}

现在,我可以成功地获取从日期 today 传递给函数的 date 的差异。问题是我想检查返回的 days 是否大于一周但小于一个月,以便我可以将其转换为 weeks 而不是显示 28 days 等。如果也可能我想包括如果返回的 days 大于 28 天时应使用 months 而不是周,如果返回的天数大于或等于,则也按 years 呈现它year

总之,不显示

26 days

我需要它来检查它是否可以转换为周,以便我可以将其呈现为:

3 weeks

或者如果我可以在 monthsyear 中渲染它。

您可以使用一个数组,将以天为单位的阈值与结果的粒度相关联。

const periods = [
    {threshold: 366, period: "years"},
    {threshold: 31, period: "months"},
    {threshold: 7, period: "weeks"},
    {threshold: 0, period: "days"}
];

days = today.diff(date, "days");
for (let i = 0; i < periods.length; i++) {
    if (days >= periods[i].threshold) {
        return today.diff(date, periods[i].period);
    }
}

moment 可以在持续时间 api:

内解决这个问题

获取毫秒数:

methods: {
    getDateDifference (date) {
        var date = moment(date, 'YYYY MM DD')
        var today = moment()
        return today.diff(date)
    } 
}

然后使用:

/* don't know the object holding methods */ 
let shortest = moment.duration(obj.methods.getDateDifference(date)).humanize();

如果超过一个月的时间,你会得到几个月而不是几天,几年而不是几个月,等等

Moment.js duration.humanize