Zapętlone odliczanie czasu

0

Witam. Chciałbym aby na stronie odliczał się cyklicznie czas np co 2 godz. Problem w tym że zawsze podczas przeładowania strony czas odlicza się od nowa a jest to ort!. Mój kod javascript:

    <div class="nextUpdate">
        <ul>
            <li>Odliczanie:</li>
            <li>

			<span id="sekundy"></span>
<script type="text/javascript">
o=document.getElementById('sekundy');
function odliczaj(o,godz,min,sek)
{
	o.innerHTML=godz + "h " + min + "min " + sek + "sek";
	if(sek >= 0)
	{
		setTimeout(function(){odliczaj(o,godz,min,--sek)},1e3);
		if(godz == 0 && min == 0 && sek == 0)
		{
			godz = 2;
			min = 0;
			sek = 0;
		}
		if(min == 0 && sek == 0)
		{
			godz--;
			min = 60;
		}
		
		if(sek == 0)
		{
			min--;
			sek = 60;
		}
	}	
}
odliczaj(document.getElementById('sekundy'),2,00,00);
</script>
			
			</li>
        </ul>
		</div>

Jakie rozwiązanie byłoby najlepsze by po załadowaniu strony np o godz 10:30 było do końca odliczania 1h30min a nie 2h?
Tutaj trzeba podawać argumenty: odliczaj(document.getElementById('sekundy'),2,00,00);

0

Już chyba trzeci temat o odliczaniu w tym tygodniu.
Zapisuj w ciastkach datę pierwszych odwiedzin, potem przy kolejnych - odejmuj czas, który już minął i dopiero podawaj do swojej funkcji ile odliczać

0

Nie chciałbym korzystać z ciastek. Raczej coś po stronie serwera. Np jakoś z bazy danych? Tylko w bazie też by musiało się jakoś zmieniać w dół czas ale czy to się opłaca?

0

nie zmieniaj czasu w dół, tylko zapisz jeden czas i porównaj z obecnym.

jeżeli nie chcesz w ciastkach zapisywać czasu to i tak jakieś ID musisz zapisać, żebyś wiedział który czas chcesz pobrać. chyba, że chcesz w ogóle logowanie do tego pisać?

0

logowanie mam napisane. myślałem żeby w bazie aktualizować ten pozostały czas a użytkownik logując się pobierze raz tę wartość a potem będzie sobie odliczało w dół po stronie przeglądarki. Tylko czy będzie to wydajne dla bazy zmieniać wartość pozostałego czasu co 1sek?

2

W żadnym wypadku takie rozwiązanie nie będzie wydajne. Proponuję zapisać w bazie/cookie czas końcowy, czyli - jeśli ktoś wejdzie na stronę o 10:40, zapisujesz timestamp dla 12:40. Przy następnym wejściu:

  • jeśli obecny timestamp<timestamp w bazie/cookie, to odliczasz pozostały czas
  • jeśli obecny timestamp>=timestamp w bazie/cookie, to możesz zmienić timestamp w bazie/cookie na obecny + 2h

Jeśli chcesz, żeby zawsze odliczało czasy np. pomiędzy parzystymi godzinami, czyli:

  • czas pozostały do 10:00
  • następnie czas pozostały do 12:00
  • ...
    to nie potrzeba Ci do tego bazy/cookie, tylko trochę logiki w skrypcie:
  • jeśli obecny timestamp>=1000 i obecny timestamp<1200, to odliczaj do 1200
  • taki warunek wstawić w petli for (i=0; i<24; i+=2), na podstawie zmiennej i tworzyć timestamp dla godzin krańcowych warunku i na tej podstawie wyszukać, do której parzystej godziny należy odliczać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1