Problem z zegarem

Kuba K1
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 5 lat
  • Postów:18
0

Witam. Mam w htmlu prosty paragraf w którym wyświetlam aktualną godzinę. Robię to w nie pierwszym projekcie i zawsze było ok ale teraz mam problem z dziwnym freezem. Zawsze gdy liczba sekund dochodzi do 59 to nagle przeskakuje na 1. sekundę nowej minuty i freezuje mi do 10. sekundy a potem idzie normalnie, i tak w kółko, dochodzi do 59., przeskakuje na 1. sekunde i freezuje do 10.
Wrzucam kodzik:

Kopiuj
function leadingZero(i) {
return (i < 10) ? '0' + 1 : i;
}

function showTime() {
const currentDate = new Date();
const time = leadingZero(currentDate.getHours()) + ":" + leadingZero(currentDate
.getMinutes()) +
":" + leadingZero(currentDate.getSeconds());

document.querySelector('.fs-timer').innerHTML = time;
}
setInterval(showTime, 1000);
edytowany 4x, ostatnio: cerrato
cerrato
Moderator Kariera
  • Rejestracja:około 7 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Poznań
  • Postów:8802
2

https://jsfiddle.net/bp1tnkzh/ - rzuć okiem, czy jest OK. Moim zdaniem ta wersja działa poprawnie.

Problemem była funkcja dodająca zero na początku. Lekko zmieniłem i w poniższej postaci wydaje się działać poprawnie. W ogóle taka porada - nie musisz stosować uproszczonego zapisu warunkowego, takie "zwykłe" if ...then jest znacznie czytelniejsze. Zwłaszcza nie polecam czegoś takiego osobom początkującym, bo oszczędność miejsca jest znikoma, za to masz wiele możliwości rypnięcia się ;)

Kopiuj
function leadingZero(i) {
	if (i<10) return '0'+i; else return i;
}

Poza tym czemu skorzystałeś z document.querySelector a nie z (moim zdaniem bardziej odpowiedniego) document.getElementById? Ma to jakieś uzasadnienie (o którym nie wiem), czy po prostu "tak wyszło"? ;)


edytowany 2x, ostatnio: cerrato
Zobacz pozostałe 3 komentarze
cerrato
@CiężkaRada: oczywiście - masz rację, pisałem na szybko i przeoczyłem. Dzięki za zwrócenie uwagi - już poprawiłem :)
Kuba K1
Dzięki :) głupi błąd :p A nie korzystam z getElementById ani ClassName bo moim zdaniem querySelector better :)
cerrato
A czemu uważasz, że lepszy? Nie czepiam się, tylko pytam, bo może czegoś się dowiem/nauczę :)
Freja Draco
Freja Draco
@Kuba K1 querySelector jest na pewno bardziej uniwersalny i pozwala tym samym poleceniem łapać elementy po różnych selektorach zależnie od parametru. Ale pytanie odnosiło się chyba raczej do tego, dlaczego identyfikujesz unikalny element po class zamiast id.
cerrato
Jak zwykle - smok wszystko zrozumiał ;)
Freja Draco
Freja Draco
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:3394
4

No bo masz:

Kopiuj
return (i < 10) ? '0' + 1 : i;

popraw na:

Kopiuj
return (i < 10) ? '0' + i : i;

A tak swoją drogą, to osobiście nie jestem zwolenniczką "hackerskiej składni".
Utrudnia czytanie i analizę kodu.


Kuba K1
Racja, dzięki głupi błąd ale zdarza się :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.