X
ďťż

[javascript] odliczanie czasu

       

Podstrony


telcocafe

modernizuje aktualnie stronkę szkoły i chciałem wstawić na nią zegar odliczający liczbę sekund pozostałych do np. końca roku ale mam problem z pojemnością zmiennych :/ Mój skyrpt wygląda tak że mam dwa obiekty jeden z datą aktualną a drugi z datą docelową następnie przeliczam date na sekundy (liczone od 1 stycznia 2008 roku - żeby liczba sekund mieściła się w zmiennej) i odejmuje mniejszą wartość od większej (a potem wiadomo .. skrypt zegara i co sekundę dekrementuję tę wartość o jeden żeby był efekt odliczania sekund w czasie rzeczywistym). wszystko działa dobrze do czasu gdy wydarzenie do którego odliczam czas nie jest większym odstępie czasu niż rok (tak około bo nie sprawdzałem ile dokładnie ... mało istotne). Dlatego mam pytanie czy ktoś wie jak to ominąć ? Niby można wymyślić własny typ zmiennej który będzie w stanie przechowywać tak duże liczby ale nie da się prościej ?

Ja jeszcze wymyśliłem żeby odejmować dni od dni miesiące od miesięcy itd (oczywiście pewne zależności jeszcze dodać że jak liczba dni jest mniejsza od odjemnika to odejmujemy dodatkowo 1 od miesiąca itp) ale wywala mi błędy (że obiekt koncowa nie posiada danej właściwości lub metody) :/ Skrypt na razie wygląda tak (nie ma zależności):
function odata(rok, mie, dzi, god, min, sek) { this.rok = rok - 2008; this.miesiac = mie; this.dzien = dzi; this.godzina = god; this.minuta = min; this.sekunda = sek; return this; } function odejmij_dzien(koncowa, poczatkowa) { // rok = koncowa.rok - poczatkowa.rok; miesiac = koncowa.miesiac - poczatkowa.miesiac; dzien = koncowa.dzien - poczatkowa.dzien; godzina = koncowa.godzina - poczatkowa.godzina; minuta = koncowa.minuta - poczatkowa.minuta; sekunda = koncowa.sekunda - poczatkowa.sekunda; suma_dni = new Array(12); suma_dni[0] = 31; if(this.rok % 4) suma_dni[1] = 29 + suma_dni[0]; else suma_dni[1] = 28 + suma_dni[0]; suma_dni[2] = 31 + suma_dni[1]; suma_dni[3] = 30 + suma_dni[2]; suma_dni[4] = 31 + suma_dni[3]; suma_dni[5] = 30 + suma_dni[4]; suma_dni[6] = 31 + suma_dni[5]; suma_dni[7] = 31 + suma_dni[6]; suma_dni[8] = 30 + suma_dni[7]; suma_dni[9] = 31 + suma_dni[8]; suma_dni[10] = 30 + suma_dni[9]; suma_dni[11] = 31 + suma_dni[10]; return sekunda + minuta * 60 + godzina * 60 * 60 + dzien * 60 * 60 * 24 + rok * (rok % 4 ? 365 : 366) * 24 * 60 * 60 + miesiac * suma_dni[miesiac] * 24 * 60 * 60 + dzien * 24 * 60 * 60; }

przykładowe wywołanie funkcji:
mojobiekt1 = new odata(2001, 12, 31, 23, 59, 59); mojobiekt2 = new odata(2001, 12, 31, 23, 59, 58); document.getElementById("put").value = odejmij_dzien(mojobiekt1, mojobiekt2);
Użytkownik OGGY_Lwiatko_89 edytował ten post 14 styczeń 2008, 17:39


Troszke takie złe rozwiązanie problemu. Zrób w php funkcję do odliczania czasu do jakiegoś zdarzenia. Jeżeli nie wiesz jak to zrobić to napisz.

Następnie wynik tej funkcji bedzie taki. Zostało 1 rok, 5 miesięcy, 3 tygodnie, 2 dni, 5 godzin, 10 sekund.
Nastepnie dekrementujesz ilość sekund. Jeżeli bedzie mniejsze niz 0 to dekrementujesz minuty, itd.

Przykład

function odata(rok, mie, dzi, god, min, sek) { this.rok = rok - 2008; this.miesiac = mie; this.dzien = dzi; this.godzina = god; this.minuta = min; this.sekunda = sek; return this; } function odlicz_czas(obj) { obj.sekunda--; if(obj.sekunda<0) { obj.sekunda=59; obj.minuta++; } /// itd }

nie nie nie ... właśnie chodzi o to żeby były sekudny :)

No i będą przecież. Masz podane żeby np odliczyc 5 minut i 10 sekund. To co sekunde zmniejsza ilosc sekund i jezeli ilosc sekund bedzie mniejsza od 0 to dekrementujesz minuty, jezeli minut bedzie mniej niz 0 to dekrementujesz godziny itd. Rozumiesz? Tym sposobem mozesz o wiele łatwiej rozwiazac swoj problem. Mozesz wprowadzac jakie jednostki chcesz a potem tylko wyświetlić wynik.



Jak sekundy to są skrypty, proste i darmowe; w tej chwili nie pamiętam adresów. Przez Google za to znalazłem taki skrypt http://ajaxin.pl/200...u-w-javascript/. Mam nadzieję, że się przyda.
Użytkownik andrzej_aa edytował ten post 14 styczeń 2008, 19:10
ale ten skrypt robi dokładnie to samo co powiedział polasek, a ja powiedziałem że nie o to mi chodzi :) ... cały bajer jest w tym że chcę czas w sekundach do danego wydarzenia (a nie w minutach, godzinach, sekundach) :)

BTW ... odpowiedzcie mi też na pytanie, dlaczego wywala mi błędy, że obiekt koncowa nie obsługuje danej właściwości lub metody w tej lini: rok = koncowa.rok - poczatkowa.rok; ? Domyślam się że w każdej następnej też występuje ten błąd ale parser (kompilator ?) nie dochodzi do tej lini. przecież wysyłam funkcji obiekt odata który ma właściwość rok (i inne też) następnie funkcja powinna odebrać go przez wartość a więc stworzyć identyczny obiekt o nazwie końcowa o skoro identyczny to powinien także posiadać właściwość rok (i inne też). Czy źle to rozumiem ?

Ech :P To jak przecież ilość godzin bedzie mniejsza od 0 to zmniejszych ilość dni, kiedy ilość dni zmniejszy się ponizej 0 to zmniejszasz tygodnie itd :) Z tym nie ma problemu :)

Tylko powiedz mi co w tym moim rozwiązaniu ci nie pasuje?


nie nie nie ... właśnie chodzi o to żeby były sekudny :) Skoro Panowie już wspomnieli o PHP, to może łatwiej :) ?<?= strtotime("2008-01-15 01:23:34")-time(); ?>
Teraz tylko wstawić w odpowiednim miejscu kod i oprogramować JSem, by co sekundę od liczby odejmowano jeden ;)
Najprostsze z możliwych rozwiązanie ;)

Skrypt wywołujący musisz umieścić za elementem diva. Ewentulanie w sekcji window.onload=function(){}

//EDIT
W samych sekundach to robisz tak jak wyżej ci napisano ale czy przemawia do ciebie zdanie "Do wakacji zostało 14872623 sekund?"
Użytkownik polasek edytował ten post 14 styczeń 2008, 20:57
DJ_ProG, dzięki ... działa tak jak chciałem :)
Użytkownik OGGY_Lwiatko_89 edytował ten post 14 styczeń 2008, 22:01
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.

    Drogi uzytkowniku!

    W trosce o komfort korzystania z naszego serwisu chcemy dostarczac Ci coraz lepsze uslugi. By moc to robic prosimy, abys wyrazil zgode na dopasowanie tresci marketingowych do Twoich zachowan w serwisie. Zgoda ta pozwoli nam czesciowo finansowac rozwoj swiadczonych uslug.

    Pamietaj, ze dbamy o Twoja prywatnosc. Nie zwiekszamy zakresu naszych uprawnien bez Twojej zgody. Zadbamy rowniez o bezpieczenstwo Twoich danych. Wyrazona zgode mozesz cofnac w kazdej chwili.

     Tak, zgadzam sie na nadanie mi "cookie" i korzystanie z danych przez Administratora Serwisu i jego partnerow w celu dopasowania tresci do moich potrzeb. Przeczytalem(am) Polityke prywatnosci. Rozumiem ja i akceptuje.

     Tak, zgadzam sie na przetwarzanie moich danych osobowych przez Administratora Serwisu i jego partnerow w celu personalizowania wyswietlanych mi reklam i dostosowania do mnie prezentowanych tresci marketingowych. Przeczytalem(am) Polityke prywatnosci. Rozumiem ja i akceptuje.

    Wyrazenie powyzszych zgod jest dobrowolne i mozesz je w dowolnym momencie wycofac poprzez opcje: "Twoje zgody", dostepnej w prawym, dolnym rogu strony lub poprzez usuniecie "cookies" w swojej przegladarce dla powyzej strony, z tym, ze wycofanie zgody nie bedzie mialo wplywu na zgodnosc z prawem przetwarzania na podstawie zgody, przed jej wycofaniem.