Question

Comment puis-je convertir secondes à une chaîne de HH-MM-SS en utilisant JavaScript?

Était-ce utile?

La solution

Vous ne savez pas datejs ? il est doit savoir.

Utilisation datejs, il suffit d'écrire quelque chose comme:

(new Date).clearTime()
          .addSeconds(15457)
          .toString('H:mm:ss');

- mise à jour

date.js De nos jours, est obsolète et non maintenu, afin d'utiliser « Moment.js », ce qui est beaucoup mieux pointue par TJ Crowder.

Autres conseils

Vous pouvez gérer le faire sans bibliothèque JavaScript externe avec l'aide de JavaScript comme méthode de la date suivante:

var date = new Date(null);
date.setSeconds(SECONDS); // specify value for SECONDS here
var result = date.toISOString().substr(11, 8);

Ou, comme par @Frank commentaire de ; une seule ligne:

new Date(SECONDS * 1000).toISOString().substr(11, 8);

Je ne pense pas que fonctionnalité intégrée de l'objet standard Date fera pour vous d'une manière qui est plus pratique que de simplement faire le calcul vous-même.

hours = Math.floor(totalSeconds / 3600);
totalSeconds %= 3600;
minutes = Math.floor(totalSeconds / 60);
seconds = totalSeconds % 60;

Exemple:

let totalSeconds = 28565;
let hours = Math.floor(totalSeconds / 3600);
totalSeconds %= 3600;
let minutes = Math.floor(totalSeconds / 60);
let seconds = totalSeconds % 60;

console.log("hours: " + hours);
console.log("minutes: " + minutes);
console.log("seconds: " + seconds);

// If you want strings with leading zeroes:
minutes = String(minutes).padStart(2, "0");
hours = String(hours).padStart(2, "0");
seconds = String(seconds).padStart(2, "0");
console.log(hours + ":" + minutes + ":" + seconds);

Je sais que c'est un peu vieux, mais ...

ES2015:

var toHHMMSS = (secs) => {
    var sec_num = parseInt(secs, 10)
    var hours   = Math.floor(sec_num / 3600)
    var minutes = Math.floor(sec_num / 60) % 60
    var seconds = sec_num % 60

    return [hours,minutes,seconds]
        .map(v => v < 10 ? "0" + v : v)
        .filter((v,i) => v !== "00" || i > 0)
        .join(":")
}

Il affichera:

toHHMMSS(129600) // 36:00:00
toHHMMSS(13545) // 03:45:45
toHHMMSS(180) // 03:00
toHHMMSS(18) // 00:18

Cleiton a souligné dans sa réponse , moment.js peut être utilisé pour ceci:

moment().startOf('day')
        .seconds(15457)
        .format('H:mm:ss');
function formatSeconds(seconds)
{
    var date = new Date(1970,0,1);
    date.setSeconds(seconds);
    return date.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");
}

fait le tour:

function secondstotime(secs)
{
    var t = new Date(1970,0,1);
    t.setSeconds(secs);
    var s = t.toTimeString().substr(0,8);
    if(secs > 86399)
        s = Math.floor((t - Date.parse("1/1/70")) / 3600000) + s.substr(2);
    return s;
}

(Provenant )

     var  timeInSec = "661"; //even it can be string

            String.prototype.toHHMMSS = function () { 
               /* extend the String by using prototypical inheritance */
                var seconds = parseInt(this, 10); // don't forget the second param
                var hours   = Math.floor(seconds / 3600);
                var minutes = Math.floor((seconds - (hours * 3600)) / 60);
                seconds = seconds - (hours * 3600) - (minutes * 60);

                if (hours   < 10) {hours   = "0"+hours;}
                if (minutes < 10) {minutes = "0"+minutes;}
                if (seconds < 10) {seconds = "0"+seconds;}
                var time    = hours+':'+minutes+':'+seconds;
                return time;
            }

            alert("5678".toHHMMSS());   // "01:34:38"
            console.log(timeInSec.toHHMMSS());   //"00:11:01"

nous pouvons faire ce lot de fonction plus courte et nette, mais qui diminue la lisibilité, donc nous allons l'écrire aussi simple que possible et aussi stable que possible.

ou vous pouvez vérifier ce travail :

Essayez ceci:

function toTimeString(seconds) {
  return (new Date(seconds * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
}

Voici une extension à la classe Number. toHHMMSS () convertit secondes à une hh: mm: ss chaîne.

Number.prototype.toHHMMSS = function() {
  var hours = Math.floor(this / 3600) < 10 ? ("00" + Math.floor(this / 3600)).slice(-2) : Math.floor(this / 3600);
  var minutes = ("00" + Math.floor((this % 3600) / 60)).slice(-2);
  var seconds = ("00" + (this % 3600) % 60).slice(-2);
  return hours + ":" + minutes + ":" + seconds;
}

// Usage: [number variable].toHHMMSS();

// Here is a simple test
var totalseconds = 1234;
document.getElementById("timespan").innerHTML = totalseconds.toHHMMSS();
// HTML of the test
<div id="timespan"></div>

Facile à suivre pour la version noobies:

 var totalNumberOfSeconds = YOURNUMBEROFSECONDS;
 var hours = parseInt( totalNumberOfSeconds / 3600 );
 var minutes = parseInt( (totalNumberOfSeconds - (hours * 3600)) / 60 );
 var seconds = Math.floor((totalNumberOfSeconds - ((hours * 3600) + (minutes * 60))));
 var result = (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) + ":" + (seconds  < 10 ? "0" + seconds : seconds);
 console.log(result);

Cette fonction devrait le faire:

var convertTime = function (input, separator) {
    var pad = function(input) {return input < 10 ? "0" + input : input;};
    return [
        pad(Math.floor(input / 3600)),
        pad(Math.floor(input % 3600 / 60)),
        pad(Math.floor(input % 60)),
    ].join(typeof separator !== 'undefined' ?  separator : ':' );
}

Sans passer un séparateur, on utilise : comme séparateur (par défaut):

time = convertTime(13551.9941351); // --> OUTPUT = 03:45:51

Si vous souhaitez utiliser - comme séparateur, il suffit de passer comme le second paramètre:

time = convertTime(1126.5135155, '-'); // --> OUTPUT = 00-18-46

Voir aussi ce Fiddle .

Je voulais juste donner une petite explication à la belle réponse ci-dessus:

var totalSec = new Date().getTime() / 1000;
var hours = parseInt( totalSec / 3600 ) % 24;
var minutes = parseInt( totalSec / 60 ) % 60;
var seconds = totalSec % 60;

var result = (hours < 10 ? "0" + hours : hours) + "-" + (minutes < 10 ? "0" + minutes : minutes) + "-" + (seconds  < 10 ? "0" + seconds : seconds);

Sur la deuxième ligne, car il y a 3600 secondes à 1 heure, on divise le nombre total de secondes par 3600 pour obtenir le nombre total d'heures. Nous utilisons parseInt pour dépouiller une décimale. Si totalSec était 12600 (3 heures et demie), puis parseInt (totalSec / 3600) retournerait 3, puisque nous aurons 3 heures complètes. Pourquoi avons-nous besoin% 24 dans ce cas? Si nous dépassons 24 heures, disons que nous avons 25 heures (90000 secondes), le modulo ici nous ramène à 1 à nouveau, plutôt que de retourner 25. Il est confinant le résultat dans une limite de 24 heures, car il y a 24 heures en un jour.

Quand vous voyez quelque chose comme ceci:

25 % 24

Pensez-y comme ceci:

25 mod 24 or what is the remainder when we divide 25 by 24

Chiming dans ce vieux fil - l'OP a déclaré HH: MM: SS, et la plupart des solutions ne fonctionne, jusqu'à ce que vous réalisez que vous avez besoin de plus de 24 heures indiqués. Et peut-être que vous ne voulez pas plus d'une seule ligne de code. Ici, vous allez:

d=(s)=>{f=Math.floor;g=(n)=>('00'+n).slice(-2);return f(s/3600)+':'+g(f(s/60)%60)+':'+g(s%60)}

Il retourne H +: MM: SS. Pour l'utiliser, il suffit d'utiliser:

d(91260);     // returns "25:21:00"
d(960);       // returns "0:16:00"

... J'ai essayé de le faire pour utiliser le moins quantité de code possible, pour une belle approche one-liner.

Voici le code donné qui convertira secondes au format hh-mm-ss:

var measuredTime = new Date(null);
measuredTime.setSeconds(4995); // specify value of SECONDS
var MHSTime = measuredTime.toISOString().substr(11, 8);

Obtenir méthode de Convertir secondes au format HH-MM-SS en JavaScript

var time1 = date1.getTime();
var time2 = date2.getTime();
var totalMilisec = time2 - time1;

alert(DateFormat('hh:mm:ss',new Date(totalMilisec)))

 /* ----------------------------------------------------------
 *  Field        | Full Form          | Short Form
 *  -------------|--------------------|-----------------------
 *  Year         | yyyy (4 digits)    | yy (2 digits)
 *  Month        | MMM (abbr.)        | MM (2 digits)
                 | NNN (name)         |
 *  Day of Month | dd (2 digits)      | 
 *  Day of Week  | EE (name)          | E (abbr)
 *  Hour (1-12)  | hh (2 digits)      | 
 *  Minute       | mm (2 digits)      | 
 *  Second       | ss (2 digits)      | 
 *  ----------------------------------------------------------
 */
function DateFormat(formatString,date){
    if (typeof date=='undefined'){
    var DateToFormat=new Date();
    }
    else{
        var DateToFormat=date;
    }
    var DAY         = DateToFormat.getDate();
    var DAYidx      = DateToFormat.getDay();
    var MONTH       = DateToFormat.getMonth()+1;
    var MONTHidx    = DateToFormat.getMonth();
    var YEAR        = DateToFormat.getYear();
    var FULL_YEAR   = DateToFormat.getFullYear();
    var HOUR        = DateToFormat.getHours();
    var MINUTES     = DateToFormat.getMinutes();
    var SECONDS     = DateToFormat.getSeconds();

    var arrMonths = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
    var arrDay=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
    var strMONTH;
    var strDAY;
    var strHOUR;
    var strMINUTES;
    var strSECONDS;
    var Separator;

    if(parseInt(MONTH)< 10 && MONTH.toString().length < 2)
        strMONTH = "0" + MONTH;
    else
        strMONTH=MONTH;
    if(parseInt(DAY)< 10 && DAY.toString().length < 2)
        strDAY = "0" + DAY;
    else
        strDAY=DAY;
    if(parseInt(HOUR)< 10 && HOUR.toString().length < 2)
        strHOUR = "0" + HOUR;
    else
        strHOUR=HOUR;
    if(parseInt(MINUTES)< 10 && MINUTES.toString().length < 2)
        strMINUTES = "0" + MINUTES;
    else
        strMINUTES=MINUTES;
    if(parseInt(SECONDS)< 10 && SECONDS.toString().length < 2)
        strSECONDS = "0" + SECONDS;
    else
        strSECONDS=SECONDS;

    switch (formatString){
        case "hh:mm:ss":
            return strHOUR + ':' + strMINUTES + ':' + strSECONDS;
        break;
        //More cases to meet your requirements.
    }
}

Avez-vous essayé d'ajouter quelques secondes à un objet Date?

var dt = new Date();
dt.addSeconds(1234);

Un échantillon: https://jsfiddle.net/j5g2p0dc/5/

Mise à jour: lien échantillon avait disparu, alors j'ai créé un nouveau.

Voici une fonction pour convertir secondes au format hh-mm-ss basée sur la réponse de powtac ici

jsFiddle

/** 
 * Convert seconds to hh-mm-ss format.
 * @param {number} totalSeconds - the total seconds to convert to hh- mm-ss
**/
var SecondsTohhmmss = function(totalSeconds) {
  var hours   = Math.floor(totalSeconds / 3600);
  var minutes = Math.floor((totalSeconds - (hours * 3600)) / 60);
  var seconds = totalSeconds - (hours * 3600) - (minutes * 60);

  // round seconds
  seconds = Math.round(seconds * 100) / 100

  var result = (hours < 10 ? "0" + hours : hours);
      result += "-" + (minutes < 10 ? "0" + minutes : minutes);
      result += "-" + (seconds  < 10 ? "0" + seconds : seconds);
  return result;
}

Exemple utiliser

var seconds = SecondsTohhmmss(70);
console.log(seconds);
// logs 00-01-10

Après avoir examiné toutes les réponses et ne pas être heureux avec la plupart d'entre eux, ce que je suis venu avec. Je sais que je suis très en retard à la conversation, mais ici il est de toute façon.

function secsToTime(secs){
  var time = new Date(); 
  // create Date object and set to today's date and time
  time.setHours(parseInt(secs/3600) % 24);
  time.setMinutes(parseInt(secs/60) % 60);
  time.setSeconds(parseInt(secs%60));
  time = time.toTimeString().split(" ")[0];
  // time.toString() = "HH:mm:ss GMT-0800 (PST)"
  // time.toString().split(" ") = ["HH:mm:ss", "GMT-0800", "(PST)"]
  // time.toTimeString().split(" ")[0]; = "HH:mm:ss"
  return time;
}

Je crée un nouvel objet Date, modifiez le temps de mes paramètres, convertir la date objet à une chaîne de temps, et enlevé les choses supplémentaires en divisant la chaîne et en retournant seulement la partie qui ont besoin.

Je pensais que je voudrais partager cette approche, car il élimine la nécessité d'acrobaties regex, logiques et mathématiques pour obtenir les résultats dans « HH: mm: ss », et au lieu qu'il repose sur les méthodes intégrées

.

Vous pouvez jeter un oeil à la documentation ici:

Dans une ligne, en utilisant T.J. La solution de Crowder:

secToHHMMSS = seconds => `${Math.floor(seconds / 3600)}:${Math.floor((seconds % 3600) / 60)}:${Math.floor((seconds % 3600) % 60)}`

Dans une ligne, une autre solution qui compte aussi des jours:

secToDHHMMSS = seconds => `${parseInt(seconds / 86400)}d ${new Date(seconds * 1000).toISOString().substr(11, 8)}`

Source: https://gist.github.com/martinbean/2bf88c446be8048814cf02b2641ba276

var sec_to_hms = function(sec){
var min, hours;
     sec = sec - (min = Math.floor(sec/60))*60;
     min = min - (hours = Math.floor(min/60))*60;
     return (hours?hours+':':'') + ((min+'').padStart(2, '0')) + ':'+ ((sec+'').padStart(2, '0'));
}
alert(sec_to_hms(2442542));

Vous pouvez également utiliser ci-dessous le code suivant:

int ss = nDur%60;
nDur   = nDur/60;
int mm = nDur%60;
int hh = nDur/60;

new Date().toString().split(" ")[4];

Résultat 15:08:03

Pour toute personne qui utilise AngularJS, une solution simple est de filtrer la valeur avec le Date API , qui convertit en une chaîne millisecondes en fonction du format demandé. Exemple:

<div>Offer ends in {{ timeRemaining | date: 'HH:mm:ss' }}</div>

Notez que cela attend millisecondes, de sorte que vous pouvez multiplier par 1000 timeRemaining si vous convertissez de secondes (comme la question initiale a été formulée).

Je courus dans le cas où certains ont mentionné où le nombre de secondes est plus d'une journée. Voici une version adaptée de réponse haut nominale @Harish Anchu qui représente plus longues périodes de temps:

function secondsToTime(seconds) {
  const arr = new Date(seconds * 1000).toISOString().substr(11, 8).split(':');

  const days = Math.floor(seconds / 86400);
  arr[0] = parseInt(arr[0], 10) + days * 24;

  return arr.join(':');
}

Exemple:

secondsToTime(101596) // outputs '28:13:16' as opposed to '04:13:16'
String.prototype.toHHMMSS = function () {
    var sec_num = parseInt(this, 10); // don't forget the second param
    var hours   = Math.floor(sec_num / 3600);
    var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
    var seconds = sec_num - (hours * 3600) - (minutes * 60);

    if (hours   < 10) {hours   = "0"+hours;}
    if (minutes < 10) {minutes = "0"+minutes;}
    if (seconds < 10) {seconds = "0"+seconds;}
    return hours+':'+minutes+':'+seconds;
}

Exemple d'utilisation

alert("186".toHHMMSS());

Aucune des réponses ici répond à mes besoins que je veux être capable de gérer

  1. Un grand nombre de secondes (jours), et
  2. Les nombres négatifs

Bien que ce ne sont pas requises par l'OP, il est bon de couvrir les cas de pointe, surtout quand il prend peu d'effort.

Il est assez évident que l'OP signifie un certain nombre de secondes quand il dit secondes . Pourquoi serait votre cheville fonction sur String?

function secondsToTimeSpan(seconds) {
    const value = Math.abs(seconds);
    const days = Math.floor(value / 1440);
    const hours = Math.floor((value - (days * 1440)) / 3600);
    const min = Math.floor((value - (days * 1440) - (hours * 3600)) / 60);
    const sec = value - (days * 1440) - (hours * 3600) - (min * 60);
    return `${seconds < 0 ? '-':''}${days > 0 ? days + '.':''}${hours < 10 ? '0' + hours:hours}:${min < 10 ? '0' + min:min}:${sec < 10 ? '0' + sec:sec}`
}
secondsToTimeSpan(0);       // => 00:00:00
secondsToTimeSpan(1);       // => 00:00:01
secondsToTimeSpan(1440);    // => 1.00:00:00
secondsToTimeSpan(-1440);   // => -1.00:00:00
secondsToTimeSpan(-1);      // => -00:00:01

Je l'ai utilisé ce code avant de créer un objet simple timespan:

function TimeSpan(time) {
this.hours = 0;
this.minutes = 0;
this.seconds = 0;

while(time >= 3600)
{
    this.hours++;
    time -= 3600;
}

while(time >= 60)
{
    this.minutes++;
    time -= 60;
}

this.seconds = time;
}

var timespan = new Timespan(3662);

Peut-être quelque chose comme ceci:

var Convert = function (time) {
    const HOUR = 60 * 60;
    const MINUTE = 60;

    var minutesInSeconds = time % HOUR;
    var hours = Math.floor(time / HOUR);
    var minutes = Math.floor(minutesInSeconds / MINUTE)
    var seconds = minutesInSeconds % MINUTE;

    return hours.padStart(2, 0) + ':' + minutes.padStart(2, 0) + ':' + seconds.padStart(2, 0);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top