MaestroS
24.05.2008, 15:37:36
Z bazy zwracana jest wartość pewnej, przyszłej daty w postaci milisekund.
Przez JavaScript chce policzyc ile zostalo czasu (godzin, minut, sekund) od teraz do tej daty.
Używam czegoś takiego:
Cytat
<script>
function setTimer(timestamp) {
valdate = new Date();
time = valdate.getTime();
valdate.setMilliseconds((timestamp - time));
document.getElementById('timer_field).innerHTML = valdate.getHours()+':'+valdate.getMinutes()+':'+valdate.getSeconds();
}
setInterval(setTimer, 1200);
</script>
Problem jest w tym:
1. Zanim setInterval ruszy, pokazuje mi wartość: 2:34:2
2. Gdy setInterval ruszy, pokazuje (bez zmiany wartości co sekundę!): 1:59:59
co jest zle ?
devnul
24.05.2008, 15:55:30
nie przekazujesz parametru timestamp do funkcji setTImer
MaestroS
24.05.2008, 16:12:06
w <body onLoad> przekazuje.
w setInterval chyba nie trzeba?
devnul
24.05.2008, 16:21:50
masz jako parametr funkcji więc trzeba
skrypt sam się nie domyśli skąd ma wziąć tą zmienną
MaestroS
24.05.2008, 17:12:48
A mozesz pokazac jak to zrobic? bo przekazujac normalnie wartosc nic nie daje
devnul
24.05.2008, 17:54:45
Kod
setInterval("setTimer("+jakas_zmienna+")", 1200);
lub
Kod
setInterval("setTimer(12345)", 1200);
MaestroS
24.05.2008, 18:12:22
Wtedy mam błąd:
Cytat
document.getElementById('timer_field) has no properties
devnul
24.05.2008, 18:39:38
bo brakuje apostrofu po timer_field
MaestroS
24.05.2008, 18:50:03
Ach, tylko we wklejonym przykladzie, widocznie przy edycji zjadlem ten apostrof.
devnul
24.05.2008, 19:12:37
w obu wklejonych przykładach. A jeśli masz jednak poprawną składnię to oznacza to że nie ma elementu w strukturze DOM który ma id taki jak podajesz. Sprawdź czy tu nie robisz literówki.
MaestroS
24.05.2008, 19:17:45
Dokładny skrypt:
Cytat
{literal}
<script>
function timerOn(timeText) {
cdate = new Date();
time = cdate.getTime();
cdate.setMilliseconds((timeText - time));
document.getElementById('where_to_put_timer').innerHTML = cdate.getHours()+':'+cdate.getMinutes()+':'+cdate.getSeconds();
}
setInterval(timerOn("+timeText+"), 1200);
</script>
{/literal}
<body onLoad="timerOn('{$time}')">
<table width="70%" align="center">
<tr><td align="center" width="86%"><B>{$action_title}</B></td> <td><img src="icons/small/clock.png"> <div id="where_to_put_timer"> </div></tr>
<tr><td style="padding: 5px 5px;" colspan="2">{$text}</td></tr>
</table>
i nie działa, oj, nie działa...
devnul
24.05.2008, 19:22:49
Kod
{literal}
<script>
function timerOn(timeText) {
cdate = new Date();
time = cdate.getTime();
cdate.setMilliseconds((timeText - time));
document.getElementById('where_to_put_timer').innerHTML = cdate.getHours()+':'+cdate.getMinutes()+':'+cdate.getSeconds();
}
setInterval('timerOn({$time})', 1200);
</script>
{/literal}
<body onLoad="timerOn('{$time}')">
<table width="70%" align="center">
<tr><td align="center" width="86%"><B>{$action_title}</B></td> <td><img src="icons/small/clock.png"> <div id="where_to_put_timer"> </div></tr>
<tr><td style="padding: 5px 5px;" colspan="2">{$text}</td></tr>
</table>
bo nie miało prawa działać. Nie zastosowałeś się do tego co pokazałem z setInterval (tak - te apostrofy były tam CELOWO, w dodatku nie podstawiłeś swojej zmiennej do funkcji odliczającej stąd błędy)
wersja powyższa powinna działać
MaestroS
24.05.2008, 19:40:07
Nie ma juz bledow, ale czas i tak jest nie taki.
Wartosc zmienia sie jedynie pomiedzy 2:34:15 i 2:34:16
devnul
24.05.2008, 20:07:23
możliwe że błędnie przekazujesz format czasu z php do js
MaestroS
24.05.2008, 21:13:36
PHP: time() i JS getTime() chyba sie nie roznia, skoro zwracaja milisekundy od czasu uniksowego?
bezposrednio do fukncji przekazuje te milisekundy wygenerowane przez time() w PHP, wiec nie wiem w czym moze byc problem ;o
devnul
24.05.2008, 21:39:38
PHP time zwraca SEKUNDY a nie milisekundy - jakaś różnica chyba jednak jest
MaestroS
24.05.2008, 21:57:52
czyli PHPowskie time() * 1000 = JS getTime(), tak?
devnul
24.05.2008, 22:00:57
jeśli przyjmiemy (słusznie zresztą) że jedna sekunda ma 1000 milisekund to tak
MaestroS
25.05.2008, 15:07:26
Mnozenie time() nie pomoglo, dlatego podzielilem getTime() na 1000 i dziala, tylko jak teraz zrobic, zeby czas malal, a nie zwiekszal sie? bo teoretycznie wszystko dziala, liczy ile jest od teraz do czasu przyszlego, ale zeby teraz malalo ;p
devnul
26.05.2008, 12:04:38
mógłbyś pokazać coś Ty tam zrobił? bo coś czuję że znowu błądzisz
MaestroS
26.05.2008, 14:13:55
Cytat
{literal}
<script>
function timerOn(timeText) {
cdate = new Date();
time = cdate.getTime()/1000;
cdate.setMilliseconds((timeText - time));
document.getElementById('where_to_put_timer').innerHTML = cdate.getHours()+':'+cdate.getMinutes()+':'+cdate.getSeconds();
}
setInterval('timerOn({/literal}{$time}{literal})', 1200);
</script>
{/literal}
<body onLoad="timerOn('{$time}')">
<table width="70%" align="center">
<tr><td align="center" width="86%"><B>{$action_title}</B></td> <td><img src="icons/small/clock.png"> <div id="where_to_put_timer"> </div></tr>
<tr><td style="padding: 5px 5px;" colspan="2">{$text}</td></tr>
</table>
devnul
26.05.2008, 15:16:14
trochę nie bardzo bo jak widzisz metoda setMilliseconds jak sama nazwa wskazuje przyjmuje za parametr czas w milisekundach więc nie możesz podawać go w sekundach. Spróbuj przemnożyć przez 1000 znacznik czasu z phpowej funkcji time w javascript a zaniechaj dzielenia czasu pobranego w javascript
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.