Ho un contatore 'tempo rimanente' in atto per i caricamenti di file. La durata residua viene calcolata e convertita in millisecondi modo:Come posso umanizzare questa durata completa in moment.js/javascript
var elapsedTime = e.timeStamp - timestarted;
var speed = e.loaded/elapsedTime;
var estimatedTotalTime = e.totalSize/speed;
var timeLeftInSeconds = (estimatedTotalTime - elapsedTime)/1000;
Poi costruire un array che intendo costruire in una stringa umanizzato. La matrice è la seguente:
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())
};
Tutto questo funziona perfettamente e se l'uscita ho una stringa che rappresenta questi dati in questo modo:
console.log(time.years + ' years, ' + time.months + ' months, ' + time.days + ' days, ' + time.hours + ' hours, '+ time.minutes + ' minutes, ' + time.seconds + ' seconds');
mi restituisce un bel semplice flusso di tempo rimanente in questo modo:
0 years, 0 months, 0 days, 0 hours, 1 minutes, 7 seconds
Quello che ora devo fare è umanizzare questo output in modo che la stringa sia costruita in base al tempo rimanente. es
- 2 anni e 3 mesi restanti
- 1 ore, 32 minuti e 41 secondi rimanenti
- 7 secondi rimanenti
- 3 minuti 46 secondi rimanenti
- 6 secondi rimanenti
ecc ... ecc ...
Ora so che ment.js ha l'abilità di umanizzare automaticamente le durate che funziona bene per valori singoli ma questo può avere più valori possibili (ore/minuti/secondi ecc.)
Come posso andare a umanizzare questi dati sia con moment.js che con costruendo manualmente la stringa?
Grazie in anticipo.
Grazie Cerberus, ho pensato di fare qualcosa di simile (anche se in un ciclo attraverso l'array), ma se la durata è grande per esempio 2 anni vorrei solo restituire gli anni, ma per le durate più piccole vorrei tornare diversi (3 minuti e 42 secondi). Speravo moment.js già gestito questo, ma non credo. – gordyr
Perfetto! Enorme grazie per il tuo aiuto! – gordyr
@gordyr: Nessun problema: D – Cerbrus