Javascript Sekunden bis Minuten und Sekunden


170

Dies ist ein häufiges Problem, aber ich bin mir nicht sicher, wie ich es lösen soll. Der folgende Code funktioniert einwandfrei.

var mind = time % (60 * 60);
var minutes = Math.floor(mind / 60);

var secd = mind % 60;
var seconds = Math.ceil(secd);

Wenn ich jedoch 1 Stunde oder 3600 Sekunden erreiche, werden 0 Minuten und 0 Sekunden zurückgegeben. Wie kann ich dies vermeiden, damit alle Minuten zurückgegeben werden?

Vielen Dank


Das liegt daran, dass bei Zeit = 3600 3600% 3600 immer 0 ist ... also wird alles andere nach Ihrer Berechnung 0 sein.
MSI

Antworten:


338

Teilen Sie die Anzahl der Gesamtsekunden durch 60 (60 Sekunden / Minute), um die Anzahl der vollen Minuten zu erhalten:

var minutes = Math.floor(time / 60);

Und um die verbleibenden Sekunden zu erhalten, multiplizieren Sie die vollen Minuten mit 60 und subtrahieren Sie von den gesamten Sekunden:

var seconds = time - minutes * 60;

Wenn Sie nun auch die vollen Stunden erhalten möchten, teilen Sie zuerst die Anzahl der Gesamtsekunden durch 3600 (60 Minuten / Stunde · 60 Sekunden / Minute) und berechnen Sie dann die verbleibenden Sekunden:

var hours = Math.floor(time / 3600);
time = time - hours * 3600;

Dann berechnen Sie die vollen Minuten und verbleibenden Sekunden.

Bonus:

Verwenden Sie den folgenden Code, um die Zeit hübsch auszudrucken (vorgeschlagen von Dru).

function str_pad_left(string,pad,length) {
    return (new Array(length+1).join(pad)+string).slice(-length);
}

var finalTime = str_pad_left(minutes,'0',2)+':'+str_pad_left(seconds,'0',2);

57
Es ist etwas sauberer, die verbleibenden Sekunden zu erhalten, indem Sie 'var Sekunden = Zeit% 60' ausführen.
Edward D'Souza

11
@ Radio füge führende Nullen hinzu mit function str_pad_left(string,pad,length){ return (new Array(length+1).join(pad)+string).slice(-length); } var finalTime = str_pad_left(minutes,'0',2)+':'+str_pad_left(seconds,'0',2);
Dru

1
Diese Lösung funktioniert nicht für negative Werte von time. Wenn Sie zum Beispiel -1 Sekunden eingeben, erhalten Sie -1 Minute und 59 Sekunden zurück ...
Pylinux

5
Was ist das Gefühl, negativ zu sein time? Logischerweise ist ein Zeitunterschied immer positiv
mcont

4
Sie können den Modul verwenden, um die Anzahl der Sekunden zu ermitteln. Meiner Meinung nach ist er besser lesbar. var seconds = time % 60
JCM

105

Eine weitere ausgefallene Lösung:

function fancyTimeFormat(duration)
{   
    // Hours, minutes and seconds
    var hrs = ~~(duration / 3600);
    var mins = ~~((duration % 3600) / 60);
    var secs = ~~duration % 60;

    // Output like "1:01" or "4:03:59" or "123:03:59"
    var ret = "";

    if (hrs > 0) {
        ret += "" + hrs + ":" + (mins < 10 ? "0" : "");
    }

    ret += "" + mins + ":" + (secs < 10 ? "0" : "");
    ret += "" + secs;
    return ret;
}

~~ist eine Abkürzung für Math.floor, siehe diesen Link für weitere Informationen

Versuchen Sie es online


14
Was bedeutet das ~~?
mcont

9
Es ist eine grundlegende Shorhand für Math.floor, siehe diesen Link .
Lapin

Es funktioniert gut ..... :) Sie können den Wert wie folgt runden: hrs = hrs.toFixed (0); min = min.toFixed (0); secs = secs.toFixed (0);
Abdul Khaliq

1
Danke für diese Lösung! Ich fügte time = math.round(time)der ersten Zeile hinzu, um mir gerundete Sekunden zu geben.
fotoflo

Dies ist die korrektere Lösung. Wie oben erwähnt, zeigt die Lösung mit den meisten Stimmen auf dieser Seite 180 Sekunden als 2m60s an.
SongBox

71

Für Leute, die in der Hoffnung auf eine schnelle, einfache und damit kurze Lösung zum Formatieren von Sekunden vorbeischauen M:SS:

function fmtMSS(s){return(s-(s%=60))/60+(9<s?':':':0')+s}

erledigt ..
Die Funktion akzeptiert entweder a Number(bevorzugt) oder eine String(2 Konvertierungs- 'Strafen', die Sie halbieren können, indem Sie +dem Argument des Funktionsaufrufs swie in :) voranstellen fmtMSS(+strSeconds), was positive ganzzahlige Sekunden sals Argument darstellt.

Beispiele:

fmtMSS(    0 );  //   0:00
fmtMSS(   '8');  //   0:08
fmtMSS(    9 );  //   0:09
fmtMSS(  '10');  //   0:10
fmtMSS(   59 );  //   0:59
fmtMSS( +'60');  //   1:00
fmtMSS(   69 );  //   1:09
fmtMSS( 3599 );  //  59:59
fmtMSS('3600');  //  60:00
fmtMSS('3661');  //  61:01
fmtMSS( 7425 );  // 123:45

Nervenzusammenbruch:

function fmtMSS(s){   // accepts seconds as Number or String. Returns m:ss
  return( s -         // take value s and subtract (will try to convert String to Number)
          ( s %= 60 ) // the new value of s, now holding the remainder of s divided by 60 
                      // (will also try to convert String to Number)
        ) / 60 + (    // and divide the resulting Number by 60 
                      // (can never result in a fractional value = no need for rounding)
                      // to which we concatenate a String (converts the Number to String)
                      // who's reference is chosen by the conditional operator:
          9 < s       // if    seconds is larger than 9
          ? ':'       // then  we don't need to prepend a zero
          : ':0'      // else  we do need to prepend a zero
        ) + s ;       // and we add Number s to the string (converting it to String as well)
}

Hinweis: Ein negativer Bereich kann durch Voranstellen (0>s?(s=-s,'-'):'')+des Rückgabeausdrucks hinzugefügt werden (würde tatsächlich (0>s?(s=-s,'-'):0)+auch funktionieren).


Ich würde vorschlagen, Math.floor(s)in die letzte Zeile zu setzen, um sauberere Ergebnisse zu erzielen. Funktioniert trotzdem super, danke!
Diego Fortes

@PossessWithin: Nein, Sie sollten aus mehreren Gründen NICHT "Math.floor (s) zur letzten Zeile hinzufügen" (des Breakdown-Snippets), vor allem, weil dies einen Fehler für Werte zwischen 9und 10ohne weitere Änderungen verursachen würde. Wenn Sie zum Beispiel eingegeben haben, 69.25wäre die Ausgabe 1:9anstelle von 1:09! Diese Funktion (für die ich ausdrücklich ganzzahlige Sekunden angegeben habe) ist als hochleistungsfähiges Knirschwerkzeug / "Motor" (nicht für die Größe ninja-golfed) gedacht und liebevoll gestaltet. Daher halte ich es für unangemessen, diesen Motor mit unnötiger Überprüfung zu belasten / Aufräumen / Filtern ...
GitaarLAB

... Arbeit (wie NaN, +/-Infinityetc.) und Rundungsoptionen , die vom Programmierer durchgeführt werden sollte, vor dem Aufruf der Funktion, basierend auf den spezifischen Bedürfnissen und möglichen Eingabewerte , dass die Anwendung auftreten können! Natürlich können Sie es patchen, wenn Ihr Domänenwissen über erwartete Eingabewerte vorschreibt, dass Ihr spezieller Anwendungsfall fast immer Gleitkommawerte erhält und Perf-Tests darauf hinweisen, dass Ihre Anwendung. In Ihrem Fall, in dem Sie nur Fußböden mit positiven Werten flicken möchten,
MÜSSEN

... ändern (9<s?':':':0')zu (10>s?':0':':')(1 (10<=s?':':':0')Zeichen hinzufügen, aber 5 von 6 wahren Pfaden zu falschen Pfaden opfern) ODER (2 Zeichen hinzufügen, aber 5 von 6 wahren Pfaden beibehalten). Dann rate ich , dieses letzte Trailing +sin +(s|0) statt zu ändern, Math.floor(s)um die Schönheit nicht zu zerstören, nicht aufgelöst und angerufen werden zu müssen, Math.floor während der gesamte 53-Bit- +/-MAX_SAFE_INTEGERBereich korrekt funktioniert , anstatt nur 32- Bit- Bereich (ohne Vorzeichen) oder 31- Bit- Bereich (vorzeichenbehaftet)! Beachten Sie, dass ABS(s)Magnetude garantiert kleiner als 60 ist, so dass die ...
GitaarLAB

... bitweise signiert ODER ist sicher. Beachten Sie auch, dass diese spezielle Modifikation ohne Bodenbelag für die verbleibenden Sekunden dazu führen würde, dass die Funktion gebrochene Sekunden ohne nachfolgende gebrochene Nullen ausgibt, aber häufig mehr als 3 signifikante Frationalziffern ungleich Null aufweist, die Sie wahrscheinlich ebenfalls verarbeiten müssten. In Kombination mit dem optionalen Pre-Fix-Code für den negativen Bereich würde diese spezielle Änderung die Sekunden effektiv TRUNCIEREN (ohne sie zu BODEN ). PS: PFFT, whoever came up with just 512 char limit for any meaningful comment should be...
GitaarLAB

21

Sie können auch ein natives Datumsobjekt verwenden:

var date = new Date(null);
date.setSeconds(timeInSeconds);

// retrieve time ignoring the browser timezone - returns hh:mm:ss
var utc = date.toUTCString();
// negative start index in substr does not work in IE 8 and earlier
var time = utc.substr(utc.indexOf(':') - 2, 8)

// retrieve each value individually - returns h:m:s
var time = date.getUTCHours() + ':' + date.getUTCMinutes() + ':' +  date.getUTCSeconds();

// does not work in IE8 and below - returns hh:mm:ss
var time = date.toISOString().substr(11, 8);

// not recommended - only if seconds number includes timezone difference
var time = date.toTimeString().substr(0, 8);

Natürlich funktioniert diese Lösung nur für timeInSeconds weniger als 24 Stunden;)


1
Ich hatte nicht daran gedacht, das Date-Objekt die Formatierung übernehmen zu lassen. Weniger flexibel, aber wenn Sie hh: mm: ss (oder einen Unterabschnitt davon) wollen, ist dies großartig
MartinAnsty

Ich habe es mit 25 Sekunden versucht und es gab 01:00:25 zurück, was 1 Stunde und 25 Sekunden entspricht.
Timstermatic

Ja, wahrscheinlich wegen Ihrer Zeitzone. Ich habe die Lösung aktualisiert, um diesen Fall zu behandeln.
Hamczu

datekönnte auch alsvar date = new Date(timeInSeconds * 1000)
Nuno André

20

2019 beste Variante

Format hh:mm:ss

console.log(display(60 * 60 * 2.5 + 25)) // 2.5 hours + 25 seconds

function display (seconds) {
  const format = val => `0${Math.floor(val)}`.slice(-2)
  const hours = seconds / 3600
  const minutes = (seconds % 3600) / 60

  return [hours, minutes, seconds % 60].map(format).join(':')
}


hmmm, secondsist const. Sie können es nicht neu zuweisen.
Ronapelbaum

@ronapelbaum dieses Argument, nicht konstant, ich verstehe nicht, was Sie meinen
Илья Зеленько

@ronapelbaum Wenn Sie die Sekunden zuweisen, anstatt sie als Parameter zu erhalten, den Sie verwenden müssen let, z. B. function display (state) { let seconds = state.seconds; ... }kam Ihr Fehler möglicherweise von dort?
Retrovertigo

Ein Funktionsparameter sollte als const behandelt werden. Wenn Sie verwenden %=, weisen Sie diesen Parameter neu zu. Verwenden seconds%60
Sie

16
function secondsToMinutes(time){
    return Math.floor(time / 60)+':'+Math.floor(time % 60);
}

3
Dies kann verbessert werden, indem die Sekunden auf Null gesetzt werden: function secondsToMinutes(time){ return Math.floor(0 / 60)+':'+('0'+Math.floor(0 % 60)).slice(-2); }
Kus

nett! danke @Kus. Nur Sie können diese beiden ersetzen möchten 0mit s time, bin ich richtig?
Mikey

2
@ Mikey oops! Ja,function secondsToMinutes(time){ return Math.floor(time / 60) + ':' + ('0' + Math.floor(time % 60)).slice(-2) }
Kus

12

Um führende Nullen hinzuzufügen, würde ich einfach Folgendes tun:

var minutes = "0" + Math.floor(time / 60);
var seconds = "0" + (time - minutes * 60);
return minutes.substr(-2) + ":" + seconds.substr(-2);

Schön kurz


9

Reinigen Sie einen Liner mit ES6


const secondsToMinutes = seconds => Math.floor(seconds / 60) + ':' + ('0' + Math.floor(seconds % 60)).slice(-2);

6

Ein Einzeiler (funktioniert nicht mit Stunden):

 function sectostr(time) {
    return ~~(time / 60) + ":" + (time % 60 < 10 ? "0" : "") + time % 60;
 }

4

Sekunden bis h: mm: ss

var hours = Math.floor(time / 3600);
time -= hours * 3600;

var minutes = Math.floor(time / 60);
time -= minutes * 60;

var seconds = parseInt(time % 60, 10);

console.log(hours + ':' + (minutes < 10 ? '0' + minutes : minutes) + ':' + (seconds < 10 ? '0' + seconds : seconds));

Kann minutes < 10 ? '0' + minutes : minutesmir jemand erklären , wenn ich nur Grundkenntnisse voraussetze?
Zediiiii

Wenn die Minuten einstellig sind (<10), stellen Sie die führende Null voran, sonst nicht.
Kayz1

Das hilft! Ich habe das nicht bemerkt "?" war der ternäre Operator in js.
Zediiiii

4

Mit der folgenden Funktion können Sie Tage, Stunden, Minuten und Sekunden abrufen

toDDHHMMSS(inputSeconds){
        const Days = Math.floor( inputSeconds / (60 * 60 * 24) );
        const Hour = Math.floor((inputSeconds % (60 * 60 * 24)) / (60 * 60));
        const Minutes = Math.floor(((inputSeconds % (60 * 60 * 24)) % (60 * 60)) / 60 );
        const Seconds = Math.floor(((inputSeconds % (60 * 60 * 24)) % (60 * 60)) % 60 );
        let ddhhmmss  = '';
        if (Days > 0){
            ddhhmmss += Days + ' Day ';
        }
        if (Hour > 0){
            ddhhmmss += Hour + ' Hour ';
        }

        if (Minutes > 0){
            ddhhmmss += Minutes + ' Minutes ';
        }

        if (Seconds > 0){
            ddhhmmss += Seconds + ' Seconds ';
        }
        return ddhhmmss;
    }
alert( toDDHHMMSS(2000));

Ich mag diesen. Ich wechselte if (Days > 0){ ddhhmmss += Days + ' Day '; }zu if (Days > 0) {ddhhmmss += Days === 1 ? Days + ' Day ' : Days + ' Days '};sagen 1 Day, 2 Days, 3 Daysusw. ähnliche kann für die andere getan werden.
Ste

4

Nach all dem noch eine einfache Lösung:

const time = new Date(null);
time.setSeconds(7530);
console.log(time.getHours(), time.getMinutes(), time.getSeconds());

1
Mit time.setSeconds(1);kehrt , 1 0 1wenn es sein sollte 0 0 1.
Ste

3

Eine andere, aber viel elegantere Lösung hierfür ist wie folgt:

/**
 * Convert number secs to display time
 *
 * 65 input becomes 01:05.
 *
 * @param Number inputSeconds Seconds input.
 */
export const toMMSS = inputSeconds => {
    const secs = parseInt( inputSeconds, 10 );
    let minutes = Math.floor( secs / 60 );
    let seconds = secs - minutes * 60;

    if ( 10 > minutes ) {
        minutes = '0' + minutes;
    }
    if ( 10 > seconds ) {
        seconds = '0' + seconds;
    }

    // Return display.
    return minutes + ':' + seconds;
};

2

Zum Hinzufügen von Nullen sehe ich wirklich keine Notwendigkeit für eine vollständige andere Funktion, die Sie zum Beispiel einfach verwenden können

var mins=Math.floor(StrTime/60);
var secs=StrTime-mins * 60;
var hrs=Math.floor(StrTime / 3600);
RoundTime.innerHTML=(hrs>9?hrs:"0"+hrs) + ":" + (mins>9?mins:"0"+mins) + ":" + (secs>9?secs:"0"+secs);

Deshalb haben wir in erster Linie bedingte Aussagen.

(Bedingung? wenn wahr: wenn falsch) Wenn also Beispielsekunden mehr als 9 sind als nur Sekunden anzeigen, fügen Sie eine Zeichenfolge 0 davor hinzu.


2

Versuchen Sie Folgendes: Konvertieren von Second in HOURS, MIN und SEC.

function convertTime(sec) {
    var hours = Math.floor(sec/3600);
    (hours >= 1) ? sec = sec - (hours*3600) : hours = '00';
    var min = Math.floor(sec/60);
    (min >= 1) ? sec = sec - (min*60) : min = '00';
    (sec < 1) ? sec='00' : void 0;

    (min.toString().length == 1) ? min = '0'+min : void 0;    
    (sec.toString().length == 1) ? sec = '0'+sec : void 0;    

    return hours+':'+min+':'+sec;
}

2

var seconds = 60;
var measuredTime = new Date(null);
measuredTime.setSeconds(seconds); // specify value of SECONDS
var Time = measuredTime.toISOString().substr(11, 8);
document.getElementById("id1").value = Time;
<div class="form-group">
  <label for="course" class="col-md-4">Time</label>
  <div class="col-md-8">
    <input type="text" class="form-control" id="id1" name="field">Min
  </div>
</div>


2

Wenn Sie Moment.js verwenden , können Sie dort das eingebaute DurationObjekt verwenden

const duration = moment.duration(4825, 'seconds');

const h = duration.hours(); // 1
const m = duration.minutes(); // 20
const s = duration.seconds(); // 25

2

2020 UPDATE

Mit einfacher Mathematik und einfachem Javascript kann dies in nur wenigen Codezeilen erfolgen.

BEISPIEL - Konvertieren 7735 secondsin HH:MM:SS.


MATHEMATIK:

Berechnungen verwenden:

  1. Math.floor()- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor

Die Math.floor()Funktion gibt die größte Ganzzahl zurück, die kleiner oder gleich einer bestimmten Zahl ist.

  1. %arithmetischer Operator (Rest) - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Remainder

Der Restoperator gibt den verbleibenden Rest zurück, wenn ein Operand durch einen zweiten Operanden geteilt wird. Es braucht immer das Zeichen der Dividende.

Überprüfen Sie den Code unten. Sekunden werden durch geteilt 3600, um die Anzahl der Stunden und einen Rest zu erhalten, der zur Berechnung der Anzahl der Minuten und Sekunden verwendet wird.

HOURS => 7735 / 3600 = 2 remainder 535

MINUTES => 535 / 60 = 8 remainder 55

SECONDS => 55


FÜHRENDE NULLEN:

Viele Antworten hier komplizierte Methoden zu zeigen Anzahl der Stunden, Minuten und Sekunden in geeigneter Weise nutzen mit führenden Null - 45, 04usw. verwendet getan werden kann padStart(). Dies funktioniert für Zeichenfolgen, daher muss die Nummer mithilfe von in Zeichenfolgen konvertiert werdentoString() .

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

Die padStart()Methode füllt die aktuelle Zeichenfolge mit einer anderen Zeichenfolge (bei Bedarf mehrmals), bis die resultierende Zeichenfolge die angegebene Länge erreicht. Das Auffüllen wird ab dem Beginn der aktuellen Zeichenfolge angewendet.


CODE:

function secondsToTime(e){
    var h = Math.floor(e / 3600).toString().padStart(2,'0'),
        m = Math.floor(e % 3600 / 60).toString().padStart(2,'0'),
        s = Math.floor(e % 60).toString().padStart(2,'0');
    
    return h + ':' + m + ':' + s;
}

console.log(secondsToTime(7735));  //02:08:55

/*
secondsToTime(SECONDS) => HH:MM:SS 

secondsToTime(8)       => 00:00:08 
secondsToTime(68)      => 00:01:08
secondsToTime(1768)    => 00:29:28
secondsToTime(3600)    => 01:00:00
secondsToTime(5296)    => 01:28:16
secondsToTime(7735)    => 02:08:55
secondsToTime(45296)   => 12:34:56
secondsToTime(145296)  => 40:21:36
secondsToTime(1145296) => 318:08:16
*/


1

Sie haben genug Code erstellt, um Minuten- und Sekundenabschnitte zu verfolgen.

Was Sie tun können, ist den Stundenfaktor hinzuzufügen in:

var hrd = time % (60 * 60 * 60);
var hours = Math.floor(hrd / 60);

var mind = hrd % 60;
var minutes = Math.floor(mind / 60);

var secd = mind % 60;
var seconds = Math.ceil(secd);

var moreminutes = minutes + hours * 60

Dies würde Ihnen auch das geben, was Sie brauchen.


Ich habe es mit "Zeit" als Sekunden versucht und es hat nicht funktioniert. Zum Beispiel bedeutet 975 Sek. Hrd = 975, was bedeutet, dass die Stunden 16 sind.
Spedge

1

Ich dachte an einen schnelleren Weg, um dies zu erreichen, und das habe ich mir ausgedacht

var sec = parseInt(time);
var min=0;
while(sec>59){ sec-=60; min++;}

Wenn wir "Zeit" in Minuten und Sekunden umrechnen möchten, zum Beispiel:

// time = 75,3 sec
var sec = parseInt(time); //sec = 75
var min=0;
while(sec>59){ sec-=60; min++;} //sec = 15; min = 1

1

Gib meine zwei Cent ein:

function convertSecondsToMinutesAndSeconds(seconds){
            var minutes;
            var seconds;
            minutes = Math.floor(seconds/60);
            seconds = seconds%60;

            return [minutes, seconds];
        }

Also das :

var minutesAndSeconds = convertSecondsToMinutesAndSeconds(101);

Wird die folgende Ausgabe haben:

[1,41];

Dann können Sie es wie folgt drucken:

console.log('TIME : ' +  minutesSeconds[0] + ' minutes, ' + minutesSeconds[1] + ' seconds');

//TIME : 1 minutes, 41 seconds

1

strftime.js ( strftime github ) ist eine der besten Formatierungsbibliotheken. Es ist extrem leicht - 30 KB - und effektiv. Mit dieser Funktion können Sie Sekunden einfach in einer Codezeile in Zeit umwandeln, wobei Sie sich hauptsächlich auf die native Datumsklasse verlassen.

Beim Erstellen eines neuen Datums ist jedes optionale Argument wie folgt positioniert:

new Date(year, month, day, hours, minutes, seconds, milliseconds);

Wenn Sie also ein neues Datum mit allen Argumenten als Null bis zu den Sekunden initialisieren, erhalten Sie:

var seconds = 150;
var date = new Date(0,0,0,0,0,seconds);
=> Sun Dec 31 1899 00:02:30 GMT-0500 (EST)

Sie können sehen, dass 150 Sekunden 2 Minuten und 30 Sekunden sind, wie aus dem Erstellungsdatum hervorgeht. Wenn Sie dann ein Strftime-Format ("% M:% S" für "MM: SS") verwenden, wird Ihre Minutenzeichenfolge ausgegeben.

var mm_ss_str = strftime("%M:%S", date);
=> "02:30"

In einer Zeile würde es so aussehen:

var mm_ss_str = strftime('%M:%S', new Date(0,0,0,0,0,seconds));
=> "02:30"

Außerdem können Sie auf diese Weise HH: MM: SS und MM: SS basierend auf der Anzahl der Sekunden austauschbar unterstützen. Beispielsweise:

# Less than an Hour (seconds < 3600)
var seconds = 2435;
strftime((seconds >= 3600 ? '%H:%M:%S' : '%M:%S'), new Date(0,0,0,0,0,seconds));
=> "40:35"

# More than an Hour (seconds >= 3600)
var seconds = 10050;
strftime((seconds >= 3600 ? '%H:%M:%S' : '%M:%S'), new Date(0,0,0,0,0,seconds));
=> "02:47:30"

Und natürlich können Sie einfach jedes Format übergeben, das Sie strftime möchten, wenn die Zeitzeichenfolge mehr oder weniger semantisch sein soll.

var format = 'Honey, you said you\'d be read in %S seconds %M minutes ago!';
strftime(format, new Date(0,0,0,0,0,1210));
=> "Honey, you said you'd be read in 10 seconds 20 minutes ago!"

Hoffe das hilft.


1
export function TrainingTime(props) {
    const {train_time } = props;
    const hours = Math.floor(train_time/3600);
    const minutes = Math.floor((train_time-hours * 3600) / 60);
    const seconds = Math.floor((train_time%60));

    return `${hours} hrs  ${minutes} min  ${seconds} sec`;
}

2
Willkommen bei Stack Overflow. Wie von @PhilRoggenbuck vorgeschlagen, würde eine Erklärung helfen. Für weitere Informationen lesen Sie stackoverflow.com/help/how-to-answer
Mikkel

0

Ich schlage eine andere Lösung vor:

function formatTime(nbSeconds, hasHours) {
    var time = [],
        s = 1;
    var calc = nbSeconds;

    if (hasHours) {
        s = 3600;
        calc = calc / s;
        time.push(format(Math.floor(calc)));//hour
    }

    calc = ((calc - (time[time.length-1] || 0)) * s) / 60;
    time.push(format(Math.floor(calc)));//minute

    calc = (calc - (time[time.length-1])) * 60;
    time.push(format(Math.round(calc)));//second


    function format(n) {//it makes "0X"/"00"/"XX"
        return (("" + n) / 10).toFixed(1).replace(".", "");
    }

    //if (!hasHours) time.shift();//you can set only "min: sec"

    return time.join(":");
};
console.log(formatTime(3500));//58:20
console.log(formatTime(305));//05:05
console.log(formatTime(75609, true));//21:00:09
console.log(formatTime(0, true));//00:00:00


0

Ich weiß, dass es auf viele Arten gelöst wurde. Ich brauchte diese Funktion für ein After Effects-Skript, bei dem Geschwindigkeits- oder Namespace-Verschmutzung kein Problem darstellt. Ich lasse es hier für jemanden fallen, der etwas Ähnliches braucht. Ich habe auch einige Tests geschrieben und gut funktioniert. Also hier ist der Code:

Number.prototype.asTime = function () {
    var hour = Math.floor(this / 3600),
        min = Math.floor((this - hour * 3600) / 60),
        sec = this - hour * 3600 - min * 60,
        hourStr, minStr, secStr;
    if(hour){
        hourStr = hour.toString(),
        minStr = min < 9 ? "0" + min.toString() : min.toString();
        secStr = sec < 9 ? "0" + sec.toString() : sec.toString();
        return hourStr + ":" + minStr + ":" + secStr + "hrs";
    }
    if(min){
        minStr = min.toString();
        secStr = sec < 9 ? "0" + sec.toString() : sec.toString();
        return  minStr + ":" + secStr + "min";
    }
    return sec.toString() + "sec";
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.