Odliczanie czasu w js


(Konradnie1) #1

Witam mam taki kod:

.



[/code]

Wszystko działa jak odlicza sekundy jednak gdy chcę odliczyć np 2 godziny to odlicza same sekundy czyli 7200 i w dół.

Jak zrobić żeby odliczanie pokazywało godz:min:sec??

Ja nie znam js więc jak ktoś wie jak to zrobic to niech napisze.

Bardzo prosze o pomoc


(Pablo_Wawa) #2

Google gryzie?

http://www.kursy.czestochowaonline.pl/javascript_tutorial/content/date.html

http://www.poradnik-webmastera.com/kursy/javascript/data_i_czas_obiekt_date.php

Zmodyfikować musisz wiersz

o.innerHTML=sek

(Konradnie1) #3

Tyle ze ja nie znam wogule js i nie wiem jak to zmodyfikować.

Nie wiem co mam zmienic.


(Grzelix) #4

kolega @Pablo_Wawa troszkę się rozpędził z tym obiektem DataTime

tutaj wystarczy prosta matematyka

pseudokod:

function formatTime( timeInSeconds){


if(timeInSeconds < 60){

return "0:0"+ timeInSeconds;

}


if(timeInSeconds < 3600){

 var minutes = timeInSeconds % 60;

var seconds = timeInSeconds - minutes * 60;


return "0:"+minutes +":" +seconds;

}


var hours = timeInSeconds % 3600;

timeInSeconds = timeInSeconds - hours *3600;

var minutes = timeInSeconds % 60;

var seconds = timeInSeconds - minutes * 60;


return huors+":"+minutes +":" +seconds;

}

w sumie to wyszedł mi całkiem dokładny js kod ale pisałem z palca więc nie daję gwarancji na pełną poprawność, ale idea jak najbardziej jest widoczna. i ostatnia zmiana wygląda tak:

o.innerHTML=formatTime(sek)

(Pablo_Wawa) #5

@grzelix - no tak, masz rację, tutaj nie trzeba podawać czasu jak aktualna godzina, ale interwał czasu, co trzeba zrobić tak jak Ty podałeś.

W kodzie

if(timeInSeconds < 60){

return "0:0"+ timeInSeconds;

zjadłeś drugi dwukropek:

if(timeInSeconds < 60){

return "0:0:"+ timeInSeconds;

I jeszcze można by było poprawić ten wyświetlany czas tak, by zawsze liczny były dwucyfrowe (brzydko wygląda czas 1:5:17 - lepiej 01:05:17 lub ew. 1:05:17), tu by się przydała funkcja taka jak ta

function two(value)

{

  if (value<10) return "0"+value;

  return value;

}

którą trzeba by zastosować potem do wyświetlanych (zwracanych przez funkcję formatTime) sekund, minut i godzin.


(th3mon) #6

Można też skorzystać z pluginu do jQuery:

http://keith-wood.name/countdown.html


(Konradnie1) #7

Niestety jakieś dziwne liczby wyświelta. Prosze niech ktoś poprawi.


(Pablo_Wawa) #8

@Kongi93 - to załącz swój kod, ewentualnie podaj linka do tej strony.


(Konradnie1) #9

Dobra poprawiłem tak:

.
[/code]


ale nie wiem gdzie uzyc funkcji two().

Niech ktoś napisze w którym miejscu jej uzyć.

-- [b]Dodane 20.11.2012 (Wt) 19:34[/b] --

Dobra poprawiłem funkcje two() i niby działa.

[code].

Czy to jest poprawnie??


(Pablo_Wawa) #10

Bardzo dobrze. Powinno działaś jak należy (no chyba, że oczekiwałeś innego efektu).

P.S. Poprzednio źle przepisałeś/skopiowałeś funkcję two() - zjadłeś drugi return. Teraz dopisałeś tę linijkę z warunkiem (drugim if), ale jest on niepotrzebny, bo po pierwszym if zawsze prawdziwy (stąd if(...) pominąłem i dałem samo "return value"). Poza tym brak zwracania wyniku funkcji two dla value == 10 (raz masz > 10 a raz < 10, a co z == 10?).


(Konradnie1) #11

Czyli mam usunać to:

if(value>10)

z funkcji two()??


(Pablo_Wawa) #12

Tak, już podałem Ci wcześniej poprawny kod tej funkcji:

function two(value)

{

  if (value<10) return "0"+value;

  return value;

}

Średniki na końcach wierszy możesz pominąć (ja je zawsze piszę).


(Gerard Zurek) #13

Witam!

Chciałbymsię spytać co zrobić, żeby czas był odliczany do jakiegoś momentu?

Bo chciałbym, żeby odliczał do 2015-03-03 , ale po wstawieniu czasu w sekundach (71712000) licznik po odświeżeniu strony odświeża od nowa... :wink:


(Konradnie1) #14

tu masz fajnie opisane:

http://videokurs.pl/artykuly/javascript/odliczanie-czasu-do-zdarzenia.php

a jak chcesz ten pierwszy kod js to musisz zapisac w bazie albo w pliku do kiedy ma odliczać i potem odejmujeszc od tamtego czasu aktualny i wstawiasz zmienną z czasem który pozostał.


(Pablo_Wawa) #15

Bazując na Twoim kodzie oraz na informacjach z linka powyżej (info przydatne bardziej Tobie) przygotowałem na szybko poniższe rozwiązane:

  1. znajdź w kodzie poniższa linię

    odliczaj(document.getElementById('sekundy'), 10)

i zastąp ją tym kodem:

var aktualnyCzas = new Date()

var dataWydarzenia = new Date(2015, 2, 3, 12, 0, 0, 0) // 2015-03-03 12:00:00.0

var czasOdliczaj = (dataWydarzenia.getTime() - aktualnyCzas.getTime())/1000

odliczaj(document.getElementById('sekundy'), czasOdliczaj)
  1. znajdź funkcję formatTime i zmodyfikuj ją od tego miejsca (wstaw dodatkowy kod)

    var hours = Math.floor(timeInSeconds / 3600);

w następujący sposób:

var days='';

if (timeInSeconds >= 3600*24)

{

  var days=Math.floor(timeInSeconds/3600/24);

  timeInSeconds-=days*3600*24;

  days+=' dni ';

}

var hours = two(Math.floor(timeInSeconds / 3600));
  1. Ostatni return w tej funkcji

    return hours+':'+ minutes +':' + seconds;

zastąp tym kodem

return days+hours+':'+ minutes +':' + seconds;

I gotowe. Jedyna wada, to odliczanie dni nie podzielone na miesiące i lata (trudniejsze, bo to zależy od danej daty) oraz brak odmiany dni (można wykryć jak będzie days==1 i wypisywać "1 dzień" zamiast "1 dni") - zamiast

days+=' dni ';

wpisz po prostu

if (days==1) days='1 dzień '

  else days+=' dni ';