2017-02-03 5 views
0

私はmoment.jsを取得して、特定の日付までの時間を表示しようとしています。私はこれをやったことがあります:MomentJsは2つの変数を使って "time until"を取得します

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

これは "in 10 days"を示しています。

in 10 days and 2 hours」または2つの最も高い値を表示することが本当に好きです。たとえば、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 

*/ 

この問題は日にちになります。 1年と1月の日数が異なるので、私はmoment.jsが私を助けてくれることを望んでいました。これを行うより良い方法はありますか?

最終的に、私は配列を繰り返して、私がどのようにしたいかを表示するための2つの最大値を見つけることができます。

答えて

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オプションがあります。モーメントがrelativeTimerelativeTimeRoundingとあなたは今、相対時間を表示する方法をカスタマイズすることができますrelativeTimeThresholdがあり

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>

注意(あなたがto出力を変更することができます)。

+0

ありがとうございます、私は技術的には、2つのtypecriptでイオン2で働いています。モーメント・デュレーション・フォーマットを自分のプロジェクトにインポートする方法を見つけたら、これを試してみましょう。ありがとうございました! – ntgCleaner

+0

あなたの最初のコードブロックは、魅力のように機能します。あなたは、私が、いくつかではなく、1つの持続時間で作業しなければならないことを実感しました。ありがとうございました! – ntgCleaner

関連する問題