Chcę przekonwertować czas trwania, tj. Liczbę sekund na ciąg czasu oddzielony dwukropkami (gg: mm: ss)
Znalazłem tu przydatne odpowiedzi, ale wszystkie mówią o konwersji do formatu x godzin i x minut.
Czy jest więc mały fragment, który robi to w jQuery lub po prostu surowy JavaScript?
Odpowiedzi:
Możesz go teraz używać w następujący sposób:
Fragment roboczy:
Pokaż fragment kodu
źródło
Możesz to zrobić bez zewnętrznej biblioteki JS za pomocą metody JS Date, takiej jak:
źródło
new Date(1000 * seconds).toISOString().substr(11, 8)
..replace(/^[0:]+/, "")
po,substr
aby usunąć wszystkie zera i:
od początku ciągu.Aby uzyskać część czasu w formacie
hh:MM:ss
, możesz użyć tego wyrażenia regularnego:(Zostało to wspomniane przez kogoś w tym samym poście, dzięki za to.)
źródło
var myDate = new Date().toTimeString().replace(/.*(\d{2}:\d{2})(:\d{2}).*/, "$1");
replace
jest mylące. Dlaczego nie użyćnew Date(null, null, null, null, null, timeInSeconds).toTimeString().match(/\d{2}:\d{2}:\d{2}/)[0]
?new Date().toTimeString().split(" ")[0]
Polecam zwykły javascript, używając obiektu Date:
(Oczywiście, utworzony obiekt Date będzie powiązany z faktyczną datą, ale dane są obce, więc do tych celów nie musisz się o to martwić.)
źródło
date.getUTCHours()
idate.getUTCMinutes()
.Wyszukiwarka Google wykazała ten wynik :
źródło
secondsToTime(119.9)
=>Object {h: 0, m: 1, s: 60}
. Aby to naprawić, dodajsecs = Math.round(secs);
na początku metody. Oczywiście widzieliśmy ten błąd podczasWariacja na temat. Trochę inaczej radzi sobie z jednocyfrowymi sekundami
źródło
Oto moje zdanie na ten temat:
Oczekiwane rezultaty:
źródło
const formatTime = (seconds, h = Math.floor(seconds / 3600), m = Math.floor((seconds % 3600) / 60), s = seconds % 60) => [h, m > 9 ? m : '0' + m, s > 9 ? s : '0' + s].filter(s => s).join(':');
second
argumenty. Uważam, że moja wersja jest wyraźniejsza, nawet jeśli jest trochę bardziej szczegółowa.seconds: number
wpisać adnotacje w es6?const s = Math.round(seconds % 60);
Podoba mi się pierwsza odpowiedź. Istnieje kilka optymalizacji:
dane źródłowe to liczba. dodatkowe obliczenia nie są potrzebne.
dużo nadmiaru przetwarzania
Kod wyniku:
źródło
Number
ma rację, ponieważseconds
w rzeczywistości jest liczbą. powinieneś przekonwertować z łańcucha przed użyciem tej funkcji, co jest właściwe!Korzystanie z niesamowitej biblioteki mom.js :
Pozwala to określić dowolny czas trwania, godziny, minuty, sekundy, młyny i zwraca wersję czytelną dla człowieka.
źródło
źródło
new Date().toString().split(" ")[4];
wynik
15:08:03
źródło
new Date(new Date().getTime() - startTime).toUTCString().split(" ")[4]
gdziestartTime
wcześniej ustawiałemstartTime = new Date().getTime();
. (Musiałem skorzystać,toUTCString()
ponieważ w przeciwnym razie godziny byłyby poza godzinami.)To całkiem proste
źródło
wynik:
źródło
Najbardziej podobała mi się Webjins, więc rozszerzyłem ją, by wyświetlała dni z sufiksem reklamy, uzależniłem wyświetlanie i umieściłem jako sufiks w zwykłych sekundach:
zwraca „3d 16:32:12” lub „16:32:12” lub „32:12” lub „12s”
źródło
Uwielbiałem odpowiedź Powtaca, ale chciałem jej użyć w angular.js, więc stworzyłem filtr przy użyciu jego kodu.
Jest funkcjonalnie identyczny, tyle że dodałem w opcjonalnym polu dziesiętnym, aby wyświetlić ułamki sekund. Używaj go jak każdego innego filtra:
{{ elapsedTime | HHMMSS }}
wyświetla:01:23:45
{{ elapsedTime | HHMMSS : 3 }}
wyświetla:01:23:45.678
źródło
Myślę, że pod względem wydajności jest to zdecydowanie najszybszy:
źródło
Przykłady
źródło
Math.floor()
sekundy, ponieważ mogą być podawane w postaci dziesiętnej. (Zdarzyło się ze mną.)Oto kolejna wersja, która obsługuje również dni:
źródło
Można użyć wyrażenia regularnego, aby dopasować podłańcuch czasu w ciągu znaków zwróconym z
toString()
metody obiektu Date, który jest sformatowany w następujący sposób: „czw. 05. 2012 02:45:12 GMT + 0100 (GMT czas letni)”. Zwróć uwagę, że to rozwiązanie wykorzystuje czas od epoki: północ 1 stycznia 1970 r. To rozwiązanie może być jedno-liniowe, chociaż podział na wiele ułatwia zrozumienie.źródło
Oto jak to zrobiłem. Wygląda na to, że działa dość dobrze i jest niezwykle kompaktowy. (Używa jednak wielu operatorów trójskładnikowych)
... i do formatowania ciągów ...
źródło
Możesz użyć następującej funkcji do przeliczenia czasu (w sekundach) na
HH:MM:SS
formatowanie:Bez przekazywania separatora służy
:
jako (domyślny) separator:Jeśli chcesz użyć
-
jako separatora, po prostu przekaż go jako drugi parametr:Próbny
Zobacz także to skrzypce .
źródło
Istnieje nowa metoda ciągów w bloku: padStart
Oto przykładowy przykład użycia: czasy trwania YouTube w 4 wierszach JavaScript
źródło
Tak to zrobiłem
timeFromSecs (22341938) zwróci „258d 14h 5m 38s”
źródło
Osobiście wolę jednostkę wiodącą (dni, godziny, minuty) bez wiodących zer. Ale sekundy zawsze powinny być poprzedzone minutami (0:13), tę prezentację można łatwo uznać za „czas trwania”, bez dalszych wyjaśnień (oznaczenie jako min, sek (s) itp.), Do użytku w różnych językach (internacjonalizacja).
// imitujące formatowanie czasu trwania strony serwera (.net, C #), takie jak:
źródło
Możesz użyć Momement.js z wtyczką formatu momentu-czasu :
Zobacz także to skrzypce
źródło
gdzie parametr locale („en”, „de” itp.) jest opcjonalny
źródło
źródło
Oto jeden linijka zaktualizowana na rok 2019:
źródło
Date
obiekt.Oto dość proste rozwiązanie, które zaokrągla się do najbliższej sekundy!
źródło
Ten napisałem niedawno dla MM: SS. Nie jest to dokładnie takie pytanie, ale jest to inny format jednowarstwowy.
Edycja: Zostało to dodane dla odmiany, ale najlepszym rozwiązaniem tutaj jest https://stackoverflow.com/a/25279399/639679 poniżej.
źródło