Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript]Odliczanie czasu
Randallmaster
post 13.09.2015, 13:19:04
Post #1





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Jak dodać do set interval date oraz callback, potrzebuję osiągnąć odliczanie z przekazaną datą.

  1. var now = new Date(timeServer['year'], timeServer['month'], timeServer['day'], timeServer['hour'], timeServer['minute'] ,timeServer['second'], 00);
  2. interval[id] = window.setInterval(function(){
  3. //tu muszę mieć parametr now, oraz callback
  4. }
Go to the top of the page
+Quote Post
Comandeer
post 13.09.2015, 13:24:18
Post #2





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Jeśli now jest zdefiniowane poza timerem, to jest w timerze po prostu widoczne.


--------------------
Go to the top of the page
+Quote Post
Randallmaster
post 13.09.2015, 13:56:18
Post #3





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


A co może być powodem że odlicza źle? Przykładowo odpalam stronę z odliczaniem, zmieniam podgląd zakładki na wp.pl posiedzę z 10 sec i później po powrocie do odliczania mam opóźnienie o to 10 sec.

ps. odliczanie działa poprawnie jeżeli nie zmieniam zakładki w przeglądarce

Ten post edytował Randallmaster 13.09.2015, 13:57:39
Go to the top of the page
+Quote Post
Comandeer
post 13.09.2015, 14:09:06
Post #4





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Bo timery są wstrzymywane/spowalniane gdy się przechodzi na inną kartę


--------------------
Go to the top of the page
+Quote Post
Randallmaster
post 13.09.2015, 14:16:51
Post #5





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


A można coś z tym zrobić? bo wtedy odliczanie czasu nie jest prawdziwe? przykładowo do końca pozostało 3 min a z powodu zmiany zakładek będzie pokazywało 4?
Go to the top of the page
+Quote Post
Comandeer
post 13.09.2015, 14:26:15
Post #6





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Wystarczy zapisać czas zakończenia do zmiennej i operować na nim.


--------------------
Go to the top of the page
+Quote Post
Randallmaster
post 13.09.2015, 17:23:51
Post #7





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


a dokładniej? mam zapisany czas w zmiennej ale tutaj występuje błąd wspomniany powyżej, a ja nie mogę zastosować new Date(), ponieważ z aplikacji korzystają firmy z np. londynu gdzie jest inna strefa czasowa ;/

  1.  
  2. var now = new Date(timeServer['year'], timeServer['month'], timeServer['day'], timeServer['hour'], timeServer['minute'] ,timeServer['second'], 00); //aktualny czas pobrany z serwera
  3.  
  4. interval[id] = window.setInterval(function(){
  5.  
  6. now.setSeconds(now.getSeconds() + 1); //
  7. },1000);
  8.  
Go to the top of the page
+Quote Post
Comandeer
post 13.09.2015, 17:28:22
Post #8





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Nie bardzo rozumiem problem. Skoro masz czas pobrany z serwera, to wystarczy prowadzić obliczenia na jego podstawie.


--------------------
Go to the top of the page
+Quote Post
Randallmaster
post 13.09.2015, 17:29:55
Post #9





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


NO POKAZAŁEM KOD. Jak przy takim kodzie przejdę na inną zakładkę i powrócę pokazuje złą godzinę, a trzymam wszystko w zmiennej tylko tak jak napisałeś zmiana zakładki powoduje zwolnienie naliczania

Ten post edytował Randallmaster 13.09.2015, 17:30:29
Go to the top of the page
+Quote Post
Comandeer
post 13.09.2015, 17:44:02
Post #10





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Można to zrobić na czasie UTC.
Można też zapisać do zmiennej czas zakończenia tak samo, jak zrobiłeś to z czasem startu - w tym momencie cała operacja sprowadza się do prostego odejmowania.


--------------------
Go to the top of the page
+Quote Post
Randallmaster
post 13.09.2015, 17:46:54
Post #11





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


mogę prosić o przykładowy skrypt? Jak dodam do zmiennej czas zakończenia jak zrobiłem z now to tak jak wspomniałeś prędzej będą następować opóźnienia w odejmowaniu po zmianie zakładki.

Ten post edytował Randallmaster 13.09.2015, 17:49:19
Go to the top of the page
+Quote Post
Comandeer
post 13.09.2015, 19:37:45
Post #12





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Ok, kombinowałem w ciut inną stronę.
Kod
<script>
    var timeServer = {
        year: <?=date('Y');?>
        ,month: <?=date('m');?>
        ,day: <?=date('d');?>
        ,hour: <?=date('H');?>
        ,minute: <?=date('i');?>
        ,second: <?=date('s');?>
    }
    ,interval
    ,paused
    ,changeTime = function(i)
    {
        i = i || 1;

        now.setSeconds(now.getSeconds() + i);

        console.log(now);
    }
    ,now = new Date(timeServer['year'], timeServer['month'], timeServer['day'], timeServer['hour'], timeServer['minute'] ,timeServer['second'], 00); //aktualny czas pobrany z serwera


    interval = setInterval(changeTime, 1000);

    document.addEventListener('visibilitychange', function()
    {

        if(document.hidden)
        {
            clearInterval(interval);
            paused = Date.now();
        }
        else
        {
            changeTime(Math.floor((Date.now() - paused) / 1000));

            interval = setInterval(changeTime, 1000);
        }

        console.log('visibilitychange', now);
    }, false);
</script>


--------------------
Go to the top of the page
+Quote Post
Randallmaster
post 14.09.2015, 08:09:40
Post #13





Grupa: Zarejestrowani
Postów: 677
Pomógł: 11
Dołączył: 18.11.2009

Ostrzeżenie: (0%)
-----


Dzięki za kod smile.gif, testuję i jedyne co znalazłem to jedną sekundę gubi podczas powrotu z innej zakładki ale to już poprawię smile.gif Wielkie dzięki!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 06:05