ďťż

[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.