Mam do dyspozycji "licznik czasu pozostałego do przesłania plików". Pozostały czas oblicza się i przekształca w milisekundach tak:Jak można uczłowieczyć ten całkowity czas trwania w chwili.js/javascript
var elapsedTime = e.timeStamp - timestarted;
var speed = e.loaded/elapsedTime;
var estimatedTotalTime = e.totalSize/speed;
var timeLeftInSeconds = (estimatedTotalTime - elapsedTime)/1000;
Następnie zbudować układ które zamierza wbudować humanizowanego łańcucha. Tablica przedstawia się następująco:
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())
};
To wszystko działa idealnie, a jeśli wyjście I reprezentację ciąg tych danych tak:
console.log(time.years + ' years, ' + time.months + ' months, ' + time.days + ' days, ' + time.hours + ' hours, '+ time.minutes + ' minutes, ' + time.seconds + ' seconds');
I zwraca piękny prosty strumień czasu pozostałego tak:
0 years, 0 months, 0 days, 0 hours, 1 minutes, 7 seconds
Co ja teraz trzeba zrobić, to uczłowieczyć to wyjście tak, że łańcuch zbudowany jest zależne od pozostałego czasu. np
- 2 lata i 3 miesiące pozostałe
- 1 godzinę, 32 minut i 41 sekund pozostałego
- 7 sekund pozostałego
- 3 minuty 46 sekund pozostałego
- 6 sekund pozostałego
itd ... itd.
Teraz wiem, że mo ment.js ma zdolność automatycznego humanizowania czasu trwania, który działa dobrze dla pojedynczych wartości, ale może mieć wiele możliwych wartości (godziny/minuty/sekundy itp.).
Jak mogę humanizować te dane za pomocą pliku moment.js lub ręcznie budujesz ciąg?
Z góry dziękuję.
Dzięki Cerberus, myślałem, że robi coś podobnego (choć w pętli za pośrednictwem tablicy), ale jeśli czas trwania jest duży, na przykład 2 lata Chciałbym tylko zwrócić lata, jednak w krótszych okresach chciałbym zwrócić kilka (3 minuty i 42 sekundy). Miałem nadzieję, że moment.js już to załatwił, ale chyba nie. – gordyr
Idealny! Ogromne dzięki za pomoc! – gordyr
@gordyr: Żaden problem: D – Cerbrus