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:
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.
.
[/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.
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?).
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ł.
Bazując na Twoim kodzie oraz na informacjach z linka powyżej (info przydatne bardziej Tobie) przygotowałem na szybko poniższe rozwiązane:
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)
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));
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