121 votes

Comment convertir millisecondes en forme lisible par l'homme?

J'ai besoin de convertir une quantité arbitraire de millisecondes en Jours, Heures, Minutes, Seconde.

Par exemple: 10 Jours, 5 heures, 13 minutes, 1 seconde.

230voto

Greg Hewgill Points 356191

Eh bien, puisque personne d'autre n'a intensifié, je vais écrire le code facile à faire:

x = ms / 1000
seconds = x % 60
x /= 60
minutes = x % 60
x /= 60
hours = x % 24
x /= 24
days = x

Je suis simplement heureux que vous avez arrêté à jours et n'a pas demandé pendant des mois. :)

Notez que dans ce qui précède, il est supposé que l' / représente tronquer division entière. Si vous utilisez ce code dans un langage où l' / représente floating point de la division, vous devrez manuellement tronquer les résultats de la division en tant que de besoin.

60voto

friol Points 4806

Laissez-le délai (en millisecondes). Ensuite, vous avez:

seconds=(A/1000)%60
minutes=(A/(1000*60))%60
hours=(A/(1000*60*60))%24

et ainsi de suite (% est l'opérateur de modulo).

Espérons que cette aide.

28voto

Nick G Points 1689

Les bibliothèques sont utiles, mais pourquoi utiliser une bibliothèque lorsque vous pouvez ré-inventer la roue! :)

function getDuration(timeMillis){
    var units = [
        {label:"millis",    mod:1000,},
        {label:"seconds",   mod:60,},
        {label:"minutes",   mod:60,},
        {label:"hours",     mod:24,},
        {label:"days",      mod:7,},
        {label:"weeks",     mod:52,},
    ];
    var duration = new Object();
    var x = timeMillis;
    for (i = 0; i < units.length; i++){
        var tmp = x % units[i].mod;
        duration[units[i].label] = tmp;
        x = (x - tmp) / units[i].mod
    }
    return duration;
}

Crée une "durée" de l'objet, avec tout ce que les champs dont vous avez besoin. Mise en forme d'un timestamp puis devient simple...

var duration = getDuration(4773904321); // example time in millis
var str = "";
str += duration.weeks + " weeks, ";
str += duration.days + " days, ";
str += duration.hours + " hours, ";
str += duration.minutes + " mins, ";
str += duration.seconds + " secs, ";
str += duration.millis + " millis";
return str;

Vous donne...

"7 weeks, 6 days, 6 hours, 5 mins, 4 secs, 321 millis"

22voto

David Dossot Points 20153

Apache Commons Lang a une DurationFormatUtils qui a des méthodes très utiles comme formatDurationWords.

8voto

albertein Points 10821

Vous devez utiliser les fonctions date et heure de la langue que vous utilisez, mais, juste pour le plaisir voici le code:

int milliseconds = someNumber;

int seconds = milliseconds / 1000;

int minutes = seconds / 60;

seconds %= 60;

int hours = minutes / 60;

minutes %= 60;

int days = hours / 24;

hours %= 24;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X