ファイルのアップロード用に「残り時間」カウンターがあります。残りの期間は次のように計算され、ミリ秒に変換されます。
var elapsedTime = e.timeStamp - timestarted;
var speed = e.loaded / elapsedTime;
var estimatedTotalTime = e.totalSize / speed;
var timeLeftInSeconds = (estimatedTotalTime - elapsedTime) / 1000;
次に、人間化された文字列に組み込む予定の配列を作成します。配列は次のとおりです。
var time = {
years : Math.round(moment.duration(timeLeftInSeconds, 'milliseconds').years()),
months : Math.round(moment.duration(timeLeftInSeconds, 'milliseconds').months()),
days : Math.round(moment.duration(timeLeftInSeconds, 'milliseconds').days()),
hours : Math.round(moment.duration(timeLeftInSeconds, 'milliseconds').hours()),
minutes : Math.round(moment.duration(timeLeftInSeconds, 'milliseconds').minutes()),
seconds : Math.round(moment.duration(timeLeftInSeconds, 'milliseconds').seconds())
};
これはすべて完全に機能し、このデータの文字列表現を次のように出力すると、次のようになります。
console.log(time.years + ' years, ' + time.months + ' months, ' + time.days + ' days, ' + time.hours + ' hours, '+ time.minutes + ' minutes, ' + time.seconds + ' seconds');
私はそれが次のように残り時間の素敵な単純なストリームを返します:
0 years, 0 months, 0 days, 0 hours, 1 minutes, 7 seconds
私が今やらなければならないことは、残り時間に応じて文字列が作成されるように、この出力を人間化することです。例えば
- 残り2年3ヶ月
- 残り1時間32分41秒
- 残り7秒
- 残り3分46秒
- 残り6秒
など...など...
これで、moment.jsには期間を自動的に人間化する機能があり、単一の値に対しては正常に機能しますが、これには複数の可能な値(時間/分/秒など)が含まれる可能性があることがわかりました。
moment.jsを使用するか、手動で文字列を作成して、このデータを人間化するにはどうすればよいですか?
前もって感謝します。