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
javascript
James Moore
quelle
quelle
Antworten:
Teilen Sie die Anzahl der Gesamtsekunden durch 60 (60 Sekunden / Minute), um die Anzahl der vollen Minuten zu erhalten:
Und um die verbleibenden Sekunden zu erhalten, multiplizieren Sie die vollen Minuten mit 60 und subtrahieren Sie von den gesamten Sekunden:
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:
Dann berechnen Sie die vollen Minuten und verbleibenden Sekunden.
Bonus:
Verwenden Sie den folgenden Code, um die Zeit hübsch auszudrucken (vorgeschlagen von Dru).
quelle
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);
time
. Wenn Sie zum Beispiel -1 Sekunden eingeben, erhalten Sie -1 Minute und 59 Sekunden zurück ...time
? Logischerweise ist ein Zeitunterschied immer positivvar seconds = time % 60
Eine weitere ausgefallene Lösung:
~~
ist eine Abkürzung fürMath.floor
, siehe diesen Link für weitere InformationenVersuchen Sie es online
quelle
~~
?Math.floor
, siehe diesen Link .time = math.round(time)
der ersten Zeile hinzu, um mir gerundete Sekunden zu geben.Für Leute, die in der Hoffnung auf eine schnelle, einfache und damit kurze Lösung zum Formatieren von Sekunden vorbeischauen
M:SS
:erledigt ..
Die Funktion akzeptiert entweder a
Number
(bevorzugt) oder eineString
(2 Konvertierungs- 'Strafen', die Sie halbieren können, indem Sie+
dem Argument des Funktionsaufrufss
wie in :) voranstellenfmtMSS(+strSeconds)
, was positive ganzzahlige Sekundens
als Argument darstellt.Beispiele:
Nervenzusammenbruch:
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).quelle
Math.floor(s)
in die letzte Zeile zu setzen, um sauberere Ergebnisse zu erzielen. Funktioniert trotzdem super, danke!9
und10
ohne weitere Änderungen verursachen würde. Wenn Sie zum Beispiel eingegeben haben,69.25
wäre die Ausgabe1:9
anstelle von1: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 ...NaN
,+/-Infinity
etc.) 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,(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+s
in+(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_INTEGER
Bereich korrekt funktioniert , anstatt nur 32- Bit- Bereich (ohne Vorzeichen) oder 31- Bit- Bereich (vorzeichenbehaftet)! Beachten Sie, dassABS(s)
Magnetude garantiert kleiner als 60 ist, so dass die ...PS: PFFT, whoever came up with just 512 char limit for any meaningful comment should be...
Sie können auch ein natives Datumsobjekt verwenden:
Natürlich funktioniert diese Lösung nur für timeInSeconds weniger als 24 Stunden;)
quelle
date
könnte auch alsvar date = new Date(timeInSeconds * 1000)
2019 beste Variante
Format
hh:mm:ss
quelle
seconds
ist const. Sie können es nicht neu zuweisen.let
, z. B.function display (state) { let seconds = state.seconds; ... }
kam Ihr Fehler möglicherweise von dort?%=
, weisen Sie diesen Parameter neu zu. Verwendenseconds%60
quelle
function secondsToMinutes(time){ return Math.floor(0 / 60)+':'+('0'+Math.floor(0 % 60)).slice(-2); }
0
mit stime
, bin ich richtig?function secondsToMinutes(time){ return Math.floor(time / 60) + ':' + ('0' + Math.floor(time % 60)).slice(-2) }
Um führende Nullen hinzuzufügen, würde ich einfach Folgendes tun:
Schön kurz
quelle
Reinigen Sie einen Liner mit ES6
quelle
Ein Einzeiler (funktioniert nicht mit Stunden):
quelle
Sekunden bis h: mm: ss
quelle
minutes < 10 ? '0' + minutes : minutes
mir jemand erklären , wenn ich nur Grundkenntnisse voraussetze?Mit der folgenden Funktion können Sie Tage, Stunden, Minuten und Sekunden abrufen
quelle
if (Days > 0){ ddhhmmss += Days + ' Day '; }
zuif (Days > 0) {ddhhmmss += Days === 1 ? Days + ' Day ' : Days + ' Days '};
sagen1 Day
,2 Days
,3 Days
usw. ähnliche kann für die andere getan werden.Nach all dem noch eine einfache Lösung:
quelle
time.setSeconds(1);
kehrt ,1 0 1
wenn es sein sollte0 0 1
.Eine andere, aber viel elegantere Lösung hierfür ist wie folgt:
quelle
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
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.
quelle
Versuchen Sie Folgendes: Konvertieren von Second in HOURS, MIN und SEC.
quelle
quelle
Wenn Sie Moment.js verwenden , können Sie dort das eingebaute
Duration
Objekt verwendenquelle
2020 UPDATE
Mit einfacher Mathematik und einfachem Javascript kann dies in nur wenigen Codezeilen erfolgen.
BEISPIEL - Konvertieren
7735 seconds
inHH:MM:SS
.MATHEMATIK:
Berechnungen verwenden:
Math.floor()
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor%
arithmetischer Operator (Rest) - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#RemainderÜ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
,04
usw. verwendet getan werden kannpadStart()
. 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
CODE:
quelle
Sie haben genug Code erstellt, um Minuten- und Sekundenabschnitte zu verfolgen.
Was Sie tun können, ist den Stundenfaktor hinzuzufügen in:
Dies würde Ihnen auch das geben, was Sie brauchen.
quelle
Ich dachte an einen schnelleren Weg, um dies zu erreichen, und das habe ich mir ausgedacht
Wenn wir "Zeit" in Minuten und Sekunden umrechnen möchten, zum Beispiel:
quelle
Gib meine zwei Cent ein:
Also das :
Wird die folgende Ausgabe haben:
Dann können Sie es wie folgt drucken:
quelle
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:
Wenn Sie also ein neues Datum mit allen Argumenten als Null bis zu den Sekunden initialisieren, erhalten Sie:
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.
In einer Zeile würde es so aussehen:
Außerdem können Sie auf diese Weise HH: MM: SS und MM: SS basierend auf der Anzahl der Sekunden austauschbar unterstützen. Beispielsweise:
Und natürlich können Sie einfach jedes Format übergeben, das Sie strftime möchten, wenn die Zeitzeichenfolge mehr oder weniger semantisch sein soll.
Hoffe das hilft.
quelle
quelle
Ich schlage eine andere Lösung vor:
quelle
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:
quelle