To częsty problem, ale nie wiem, jak go rozwiązać. Poniższy kod działa dobrze.
var mind = time % (60 * 60);
var minutes = Math.floor(mind / 60);
var secd = mind % 60;
var seconds = Math.ceil(secd);
Jednak gdy dojdę do 1 godziny lub 3600 sekund, zwraca 0 minut i 0 sekund. Jak mogę tego uniknąć, żeby zwracało wszystkie minuty?
Dzięki
javascript
James Moore
źródło
źródło
Odpowiedzi:
Aby uzyskać liczbę pełnych minut, podziel łączną liczbę sekund przez 60 (60 sekund / minutę):
Aby otrzymać pozostałe sekundy, pomnóż pełne minuty przez 60 i odejmij od całkowitej liczby sekund:
Teraz, jeśli chcesz również uzyskać pełne godziny, najpierw podziel całkowitą liczbę sekund przez 3600 (60 minut / godzinę · 60 sekund / minutę), a następnie oblicz pozostałe sekundy:
Następnie obliczasz pełne minuty i pozostałe sekundy.
Premia:
Użyj poniższego kodu, aby dobrze wydrukować czas (sugerowany przez Dru)
źródło
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
. Jeśli na przykład wpiszesz -1 sekund, otrzymasz -1 minutę i 59 sekund wstecz ...time
? Logicznie rzecz biorąc, różnica czasu jest zawsze dodatniavar seconds = time % 60
Kolejne fantazyjne rozwiązanie:
~~
jest skrótemMath.floor
, zobacz ten link, aby uzyskać więcej informacjiWypróbuj online
źródło
~~
?Math.floor
, zobacz ten link .time = math.round(time)
do pierwszego wiersza, aby uzyskać zaokrąglone sekundy.Dla osób, które mają nadzieję na szybkie, proste, a tym samym krótkie rozwiązanie formatowania sekund na
M:SS
:zrobić ..
Funkcja przyjmuje albo
Number
(korzystny) lub AString
(2 konwersja „kar”, który może zmniejszyć o połowę przez poprzedzenie+
argument wywołanie funkcji dlas
na przykład:fmtMSS(+strSeconds)
), co stanowi całkowite dodatnie sekunds
jako argument.Przykłady:
Awaria:
Uwaga: Ujemny zakres można dodać, poprzedzając
(0>s?(s=-s,'-'):'')+
wyrażenie zwracane (w rzeczywistości też(0>s?(s=-s,'-'):0)+
zadziała).źródło
Math.floor(s)
do ostatniej linii, aby uzyskać czystsze wyniki. I tak działa świetnie, dzięki!9
i10
bez dalszych modyfikacji; jeśli wpiszesz na przykład,69.25
wynik będzie wyglądał1:9
zamiast1:09
! Ta funkcja (dla której wyraźnie określiłem całkowite sekundy) jest przeznaczona i pięknie wykonana jako narzędzie do chrupania o wysokiej wydajności / `` silnik '' (nie dla rozmiaru ninja-golf) i jako taka uważam za niewłaściwe obciążanie tego silnika niepotrzebną weryfikacją / cleanup / filtering ...NaN
,+/-Infinity
itd.) I zaokrąglenia opcje , które powinny być wykonywane przez programistę przed wywołaniem funkcji, w zależności od potrzeb konkretnych i możliwych wartościach wejściowych, że aplikacja może spotkać! Oczywiście możesz to załatać, jeśli wiedza domeny o oczekiwanych wartościach wejściowych mówi, że twój konkretny przypadek użycia prawie zawsze otrzymuje wartości zmiennoprzecinkowe, a testowanie wydajności wskazuje, że twoja aplikacja. W twoim przypadku, gdy chcesz(9<s?':':':0')
do(10>s?':0':':')
(dodając 1 znak, ale „poświęcając” 5 z 6 prawdziwych ścieżek na fałszywe ścieżki) LUB(10<=s?':':':0')
(dodając 2 znaki, ale zachowując 5 z 6 prawdziwych ścieżek). Następnie radzę zmienić ostateczne zakończenie+s
na+(s|0)
zamiastMath.floor(s)
, aby nie zniszczyć piękna braku konieczności rozstrzygania i sprawdzania,Math.floor
podczas gdy nadal działa poprawnie w całym 53-bitowym+/-MAX_SAFE_INTEGER
zakresie zamiast „tylko” 32-bitowego (bez znaku) lub 31-bitowego (ze znakiem)! Pamiętaj, żeABS(s)
magnetude na pewno będzie mniejszy niż 60, więc podpisany ...PS: PFFT, whoever came up with just 512 char limit for any meaningful comment should be...
Możesz także użyć natywnego obiektu Date:
Oczywiście to rozwiązanie działa tylko dla timeInSeconds krótszych niż 24 godziny;)
źródło
date
może być również skonstruowany jakovar date = new Date(timeInSeconds * 1000)
Najlepszy wariant 2019
Format
hh:mm:ss
źródło
seconds
jest const. nie możesz go ponownie przypisać.let
, np.function display (state) { let seconds = state.seconds; ... }
czy to może być przyczyną błędu?%=
, ponownie przypisujesz ten parametr. Po prostu użyjseconds%60
źródło
function secondsToMinutes(time){ return Math.floor(0 / 60)+':'+('0'+Math.floor(0 % 60)).slice(-2); }
0
sztime
, jestem poprawna?function secondsToMinutes(time){ return Math.floor(time / 60) + ':' + ('0' + Math.floor(time % 60)).slice(-2) }
Aby dodać wiodące zera, po prostu zrobiłbym:
Ładnie i krótko
źródło
Wyczyść jedną wkładkę za pomocą ES6
źródło
Jedna wkładka (nie działa z godzinami):
źródło
Sekundy do h: mm: ss
źródło
minutes < 10 ? '0' + minutes : minutes
mi wyjaśnić , zakładając tylko podstawową wiedzę js?Następująca funkcja pomoże Ci uzyskać dni, godziny, minuty, sekundy
źródło
if (Days > 0){ ddhhmmss += Days + ' Day '; }
sięif (Days > 0) {ddhhmmss += Days === 1 ? Days + ' Day ' : Days + ' Days '};
powiedzieć1 Day
,2 Days
,3 Days
itd. Podobnie można zrobić dla innych.Po tym wszystkim jeszcze jedno proste rozwiązanie:
źródło
time.setSeconds(1);
zwrotów,1 0 1
gdy powinno0 0 1
.Inne, ale znacznie bardziej eleganckie rozwiązanie jest następujące:
źródło
Aby dodać zera, naprawdę nie widzę potrzeby posiadania pełnej innej funkcji, którą można po prostu użyć na przykład
Właśnie dlatego mamy na pierwszym miejscu instrukcje warunkowe.
(warunek? jeśli prawda: jeśli fałsz), więc jeśli przykładowe sekundy są większe niż 9, pokaż tylko sekundy, w przeciwnym razie dodaj ciąg 0 przed nim.
źródło
spróbuj tego: Zamień sekundę na HOURS, MIN i SEC.
źródło
źródło
Jeśli używasz Moment.js , możesz użyć wbudowanego
Duration
obiektuźródło
AKTUALIZACJA 2020
Korzystając z podstawowej matematyki i prostego JavaScript, można to zrobić w zaledwie kilku wierszach kodu.
PRZYKŁAD - Konwertuj
7735 seconds
naHH:MM:SS
.MATEMATYKA:
Obliczenia wykorzystują:
Math.floor()
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor%
operator arytmetyczny (Remainder) - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#RemainderSprawdź kod poniżej. Sekundy są dzielone przez,
3600
aby uzyskać liczbę godzin i pozostałą część, która jest używana do obliczania liczby minut i sekund.HOURS => 7735 / 3600 = 2 remainder 535
MINUTES => 535 / 60 = 8 remainder 55
SECONDS => 55
WIODĄCE ZERA:
Wiele odpowiedzi tutaj używać skomplikowanych metod, aby pokazać liczbę godzin, minut i sekund w odpowiedni sposób z zerem -
45
,04
itd. Można to zrobić za pomocąpadStart()
. Działa to w przypadku ciągów, więc liczbę należy przekonwertować na ciąg przy użyciutoString()
.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
KOD:
źródło
Zrobiłeś wystarczająco dużo kodu, aby śledzić części minut i sekund.
Możesz dodać liczbę godzin do:
Dałoby ci to również to, czego potrzebujesz.
źródło
Myślałem o szybszym sposobie zrobienia tego i oto, co wymyśliłem
Jeśli chcemy przeliczyć „czas” na minuty i sekundy, na przykład:
źródło
Umieść moje dwa centy w:
Więc to :
Będzie mieć następujący wynik:
Następnie możesz wydrukować to w ten sposób:
źródło
strftime.js ( strftime github ) to jedna z najlepszych bibliotek formatujących czas. Jest niezwykle lekki - 30 KB - i skuteczny. Używając go, możesz łatwo przekształcić sekundy w czas w jednej linii kodu, opierając się głównie na natywnej klasie Date.
Podczas tworzenia nowej daty każdy opcjonalny argument jest pozycyjny w następujący sposób:
Więc jeśli zainicjujesz nową datę ze wszystkimi argumentami równymi zero do sekund, otrzymasz:
Możesz zobaczyć, że 150 sekund to 2 minuty i 30 sekund, jak widać w utworzonej dacie. Następnie używając formatu strftime („% M:% S” zamiast „MM: SS”), wyświetli ciąg minut.
W jednej linii wyglądałoby to tak:
Dodatkowo umożliwiłoby to wymienną obsługę HH: MM: SS i MM: SS w oparciu o liczbę sekund. Na przykład:
Oczywiście możesz po prostu przekazać dowolny format do strftime, jeśli chcesz, aby ciąg czasu był mniej lub bardziej semantyczny.
Mam nadzieję że to pomoże.
źródło
źródło
Proponuję inne rozwiązanie:
źródło
Wiem, że zostało to rozwiązane na wiele sposobów. Potrzebowałem tej funkcji dla skryptu After Effects, w którym prędkość lub zanieczyszczenie przestrzeni nazw nie jest problemem. Rzucam to tutaj dla kogoś, kto potrzebuje czegoś podobnego. Napisałem też kilka testów i działało dobrze. Oto kod:
źródło