Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V  < 1 2  
Reply to this topicStart new topic
> [JavaScript][PHP] Różnica w odmierzaniu czasu, jak znowelować lub zsynchronizować
SmokAnalog
post 18.09.2020, 15:09:20
Post #21





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Praktycznie to samo. To jak brzmi pytanie? smile.gif
Go to the top of the page
+Quote Post
shpaque
post 18.09.2020, 15:16:35
Post #22





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


ponieważ w jednym miejscu - wlasciwie glownym - korzystam z "jquery final countdown", ktory fajnie pracuje sobie i nie chcialbym z niego rezygnować, natomiast w pliku js ma zakodowany pobor daty standardowo js'em i niestety tu nie moge dojsc w koncu jak to zmienic. Moj obecny skrypot wyglada tak:

  1. <script src="./../js/jquery-3.3.1.min.js"></script>
  2. <script src="./../js/jquery.countdown.min.js"></script>
  3. <script type="text/javascript">
  4. // Obliczamy różnicę między czasem serwera i przeglądarki / systemu
  5. var serverTime = new Date('<?php echo date('c'); ?>');
  6. var systemTime = new Date();
  7. var correction = systemTime - serverTime;
  8. var correctTime = new Date(Date.now() - correction);
  9.  
  10. nextTimeStart = <?php echo isset($nextTest['timeStart']) ? 'new Date("'.date('c', strtotime($nextTest['timeStart'])).'")' : '\'\''; ?>;
  11. currentTimeEnd = <?php echo isset($currentTest['timeEnd']) ? 'new Date("'.date('c', strtotime($currentTest['timeEnd'])).'")' : '\'\''; ?>;
  12. getTest = "<?php echo isset($getTest) ? $getTest : ''; ?>";
  13. getUser = "<?php echo isset($getUser) ? $getUser : ''; ?>";
  14. getInTime = "<?php echo isset($getInTime) ? $getInTime : ''; ?>";
  15.  
  16. if (currentTimeEnd !== '') {countDownTime = currentTimeEnd;}
  17. else {countDownTime = nextTimeStart;}
  18.  
  19. if (nextTimeStart !== '' || currentTimeEnd !== '') {
  20. $('#days, #hours, #minutes, #seconds').countdown(countDownTime, {precision: 100})
  21. .on('update.countdown', function(event) {
  22. if (event.offset.totalHours < 24) {$('#days, #days-th').css('display', 'none');} else {$('#days').html(event.strftime('%D'));}
  23. if (event.offset.totalMinutes < 60) {$('#hours, #hours-th').css('display', 'none');} else {$('#hours').html(event.strftime('%H'));}
  24. $('#minutes').html(event.strftime('%M'));
  25. $('#seconds').html(event.strftime('%S'));
  26.  
  27. // Opcje dla licznika najbliższego testu
  28. if (currentTimeEnd === '') {
  29. if (event.offset.totalSeconds < 300) {
  30. $('#alert').css({'color': 'var(--dark-grey)', 'background-color': 'var(--yellow)'});
  31. $('#bloc-time').css('display', 'none');
  32. }
  33. }
  34. // Opcje dla licznika trwającego testu
  35. else {
  36. document.title = event.strftime('%H:%M:%S') + ' <?php echo isset($currentTest['title']) ? $currentTest['title'] : ''; ?> / Test OnLine';
  37.  
  38. if (getTest !== '' && getUser !== '') {
  39. $('#bloc-button-join').css('display', 'none');
  40. $('#bloc-time').css('display', 'none');
  41. }
  42. else {
  43. $('#bloc-button-join').css({'display': 'block', 'background-color': 'var(--green);'});
  44. $('#button-join').html('Dołącz do testu');
  45. $('#button-join').attr('href', './index.php?t=<?php echo isset($currentTest['id']) ? $currentTest['id'] : ''; ?>&u=<?php echo isset($newUserId) ? $newUserId : ''; ?>');
  46. $('#bloc-time').css('display', 'block');
  47. }
  48.  
  49. if (event.offset.totalSeconds > 300) {
  50. $('#alert').css({'color': 'var(--white)', 'background': 'var(--green)'});
  51. if (getTest === '' && getUser === '') {$('#bloc-button-join').css({'display': 'block', 'background': 'var(--green)'});}
  52. }
  53. if (event.offset.totalSeconds > 60 && event.offset.totalSeconds < 300) {
  54. $('#alert').css({'color': 'var(--dark-grey)', 'background-color': 'var(--yellow)'});
  55. if (getTest === '' && getUser === '') {$('#bloc-button-join').css({'display': 'block', 'background-color': 'var(--yellow)'});}
  56. }
  57. if (event.offset.totalSeconds < 60) {
  58. $('#bloc-button-join').css({'display': 'none', 'background-color': 'var(--rose)'});
  59. $('#alert').css({'color': 'var(--white)', 'background-color': 'var(--rose)'});
  60. $('#minutes, #seconds').css('color', 'var(--rose)');
  61. }
  62. }
  63. })
  64. .on('finish.countdown', function(event) {
  65. $('#seconds').html(event.strftime('00'));
  66. if (countDownTime === nextTimeStart) {
  67. $('#table-title-th').html('Rozpoczyna się test');
  68. $('#table-head').html('Test rozpoczyna się');
  69. $('#startTestInfo').html('<strong>Przygotowuję arkusz testowy...</strong>');
  70. }
  71. else if (countDownTime === currentTimeEnd) {
  72. document.title = 'Test zakończony - <?php echo isset($currentTest['title']) ? $currentTest['title'] : ''; ?> / Test OnLine';
  73. $('#table-title-th').html('Zakończył się test');
  74. $('#table-head').html('Test zakończony');
  75. $('#endTestInfo').html('<strong>Obliczam wyniki...</strong>');
  76. }
  77.  
  78. if (getTest !== '' && getUser !== '' && getInTime === '1') {setTimeout(function() {window.location.href = './wyniki.php?t=' + getTest + '&u=' + getUser + '&it=1';}, 10000);}
  79. else {setTimeout(function() {window.location.reload(true);}, 1000);}
  80. });
  81. }


prolem w tym ze plik js ww. api jest zwalony bo nie dziala, dziala tylko js.min. - ktory wiadomo jest tak skondensowany ze ciezko sie polapac: http://hilios.github.io/jQuery.countdown/
Go to the top of the page
+Quote Post
SmokAnalog
post 18.09.2020, 15:42:38
Post #23





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Nie za bardzo mi się chce analizować ten kod. Możesz powiedzieć w skrócie co nie działa?
Go to the top of the page
+Quote Post
shpaque
post 21.09.2020, 14:03:03
Post #24





Grupa: Zarejestrowani
Postów: 651
Pomógł: 3
Dołączył: 31.01.2011
Skąd: Warszawa

Ostrzeżenie: (10%)
X----


po krótce nie wiem jak w pliku api (the final countdown) ustawic zeby tez czas bral juz po zniwelowaniu roznicy czasu serwera i klienta. Tak jak sam sobie to napisalem w swoim skrypcie. Trzymam sie tego api bo sama instrukcja zegara odbierzacza jest duzo prostsza i dziala przede wszystkim po zqatrzymaniu zegara, co w zwyklym js robilo problem i w ogole trzeba bylo 2 razy tyle pisac zeby osiagnbac ten sam efekt...
Go to the top of the page
+Quote Post

2 Stron V  < 1 2
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: 19.04.2024 - 03:52