Javascript 返回字符串:';天';或';月份';或';年';基于N天
我正在Javascript 返回字符串:';天';或';月份';或';年';基于N天,javascript,vue.js,momentjs,Javascript,Vue.js,Momentjs,我正在vue 3上使用moment.js。 我有一个函数,它返回两个日期的差值。这是可行的,但与我的问题有关。函数的编写方式如下: methods: { getDateDifference (date) { var date = moment(date, 'YYYY MM DD') var today = moment() return today.diff(date, 'days') } } 现在,我可以成功地获得传递给函数的
vue 3
上使用moment.js
。
我有一个函数,它返回两个日期的差值
。这是可行的,但与我的问题有关。函数的编写方式如下:
methods: {
getDateDifference (date) {
var date = moment(date, 'YYYY MM DD')
var today = moment()
return today.diff(date, 'days')
}
}
现在,我可以成功地获得传递给函数的日期与今天的日期的差异。问题是我想检查返回的days
是否大于一周但小于一个月,以便将其转换为weeks
,而不是显示28天
等。。如果可能的话,我想包括当返回的天数大于28天时是否应使用月
而不是周,如果返回的天数大于或等于年
简而言之,不是显示
26 days
我需要它来检查它是否可以转换为周,以便我可以将其呈现为:
3 weeks
或者,如果我可以在月
或年
中渲染它,您可以使用一个数组,将天的阈值与结果的粒度关联起来
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);
}
}
const periods=[
{起点:366,期间:“年”},
{阈值:31,期间:“月”},
{阈值:7,周期:“周”},
{阈值:0,句点:“天”}
];
天=今天.diff(日期,“天”);
for(设i=0;i=时段[i]。阈值){
今天返回.diff(日期,期间[i].period);
}
}
您可以使用一个数组,将天数内的阈值与结果的粒度关联起来
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);
}
}
const periods=[
{起点:366,期间:“年”},
{阈值:31,期间:“月”},
{阈值:7,周期:“周”},
{阈值:0,句点:“天”}
];
天=今天.diff(日期,“天”);
for(设i=0;i=时段[i]。阈值){
今天返回.diff(日期,期间[i].period);
}
}
瞬间
可以通过持续时间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();
如果超过一个月的时间,你会得到几个月而不是几天,几年而不是几个月,等等
瞬间
可以通过持续时间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();
如果超过一个月的时间,你会得到几个月而不是几天,几年而不是几个月,等等
将差异放入变量中。然后你可以使用if
语句来返回不同的结果。谢谢@Barmar,我刚刚这么做了,但是我真的对编写一个非常大的if
else
链感到很难过。没有别的办法吗?我发布了一个答案,但它只是一个由4个if/else
@Barmar组成的链。与我所做的相比,它肯定更小。我试试看。这似乎预示着将差异放入变量中。然后你可以使用if
语句来返回不同的结果。谢谢@Barmar,我刚刚这么做了,但是我真的对编写一个非常大的if
else
链感到很难过。没有别的办法吗?我发布了一个答案,但它只是一个由4个if/else
@Barmar组成的链。与我所做的相比,它肯定更小。我试试看。这看起来像是对你的承诺!这似乎奏效了。但是,阈值:31,句点,“月”
上有一个小语法错误。但由于我使用的是momentjs
我想,我将转到@minusFour的答案+1,这对于vanilla js用户来说是一个很好的开始。谢谢!这似乎奏效了。但是,阈值:31,句点,“月”
上有一个小语法错误。但由于我使用的是momentjs
我想,我将转到@minusFour的答案+1,这对vanilla js用户来说是一个很好的开始。我不知道那个API!谢谢,我查一下。对于像我这样需要配置humanize()
输出的用户,最好只使用momentjs
,您可以通过如下方式传递配置:humanize(false,{d:7,w:4,m:31,y:365})
不知道该API!谢谢,我查一下。对于像我这样需要配置humanize()
输出的用户,最好只使用momentjs
,您可以通过如下方式传递配置:humanize(false,{d:7,w:4,m:31,y:365})