2017-02-03 56 views
0

我想让moment.js给我看时间,直到特定的日期。我已经这样做了:MomentJs得到“时间直到”与两个变量

let date = 2017-03-27T12:00:00; 
moment().to(date); 

这显示:“in 10 days”。

我真的很喜欢这显示“in 10 days and 2 hours”或两个最高值。例如,1 year and 5 months,4 minutes and 30 seconds

有没有简单的方法来做到这一点?我目前正在处理这种复杂的方法...

let years = moment(date).local().diff(moment(), 'years'); 
let months = (moment(date).local().diff(moment(), 'months')); 
let days = (moment(date).local().diff(moment(), 'days')); 
let hours = (moment(date).local().diff(moment(), 'hours')); 
let minutes = (moment(date).local().diff(moment(), 'minutes')); 
let seconds = (moment(date).local().diff(moment(), 'seconds')); 

//The above values return total number each, 
//For example, this could show 1 year, 14 months, 435 days, etc. 
//The math below is supposed to make this say 
//1 year, 2 months, 14 days, etc. 

let yearsRemain = years; 
let monthsRemain = months - (years *12); 
let daysRemain = days - (Math.floor(months * 30)); 
let hoursRemain = hours - (days * 24); 
let minutesRemain = minutes - (hours * 60); 
let secondsRemain = seconds - (minutes * 60); 

var dateArray = [ 
    yearsRemain, 
    monthsRemain, 
    daysRemain, 
    hoursRemain, 
    minutesRemain, 
    secondsRemain 
] 

console.log(dateArray); 

/* 

returns [1, 1, 3, 23, 16, 46] for example 

*/ 

这个问题是当涉及到天。由于一年中的日子和一个月中的日子不同,我希望moment.js能帮助我。有没有更好的方法来做到这一点?

最终,我将能够遍历数组并找到两个最大的值来显示我想要的。

回答

2

您可以使用moment.duration来计算dateArray的值。持续时间有years(),months(),days(),hours(),minutes(),seconds()获得者。

这里一个活生生的例子:

let date = '2017-03-27T12:00:00'; 
 
var dur = moment.duration(moment(date).diff(moment())); 
 

 
let yearsRemain = dur.years(); 
 
let monthsRemain = dur.months(); 
 
let daysRemain = dur.days(); 
 
let hoursRemain = dur.hours(); 
 
let minutesRemain = dur.minutes(); 
 
let secondsRemain = dur.seconds(); 
 

 
var dateArray = [ 
 
    yearsRemain, 
 
    monthsRemain, 
 
    daysRemain, 
 
    hoursRemain, 
 
    minutesRemain, 
 
    secondsRemain 
 
] 
 

 
console.log(dateArray);
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

可以使用moment-duration-format插件显示自定义格式的持续时间。该插件有一个template选项,可让您自定义格式。

let date = '2017-03-27T12:00:00'; 
 
let dur = moment.duration(moment(date).diff(moment())); 
 
console.log(dur.format()); 
 
console.log(dur.format('M [months and] d [days]'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>

注意,时刻有relativeTimerelativeTimeRoundingrelativeTimeThreshold,让你自定义的时刻是如何显示相对时间(所以你可以改变to输出)。

+0

谢谢你,我在技术上工作在离子2与打字稿。一旦我找到了如何将时间间隔格式导入到我的项目中,我会尝试一下。谢谢! – ntgCleaner

+0

你的第一块代码就像一个魅力。你让我意识到我应该在1个持续时间内工作,而不是几个。谢谢! – ntgCleaner