Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odliczanie minut i sekund
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Johnas
Witam mam w bazie danych format daty zapisany w sposób:
20101030023802<- jest to czas w dodany
RRRRmmddggmmss
teraz chce aby po odjęciu od tego czasu aktualnego odliczał zegar. Przykład:
20101030023802-20101030023502=302
czyli 3 minuty i 2 sekundy. Mogę to jeszcze przerobić na 182 sekundy
czy dało by się zrobić w JS aby ten wynik był odliczany automatycznie na stronie?
flashdev
Cytat(Jonek_1993 @ 30.10.2010, 03:02:20 ) *
20101030023802-20101030023502=302


To nie jest dobry sposób. Nie zawsze zadziała prawidłowo.

Cytat(Jonek_1993 @ 30.10.2010, 03:02:20 ) *
czy dało by się zrobić w JS aby ten wynik był odliczany automatycznie na stronie?


Podobno wszystko się da:
http://forum.php.pl/index.php?s=&showt...st&p=783819
Johnas
Zrobiłem tak :
Plik header.php
  1. <?php
  2. include 'db.php'; // połączenie się z bazą danych
  3. if ($_SESSION['login']){
  4. $tabela = 'user'; // zdefiniowanie tabeli MySQL
  5. $id = $_SESSION['id'];
  6. $passek = mysql_fetch_array(mysql_query("SELECT * FROM userdane WHERE iduser='$id'"));
  7. $koniec = $passek['czekanie'];
  8. $sekund = strtotime($koniec);
  9. print '<script type="text/javascript">';
  10. print 'function timers($input, $sekund){';
  11. print "var $ms = $sekund*1000+700\n,";
  12. ?>
  13.  
  14. $self=this,
  15. $odliczanie,
  16. wyswietl = function($ob){
  17. $input.value=[$ob.h,$ob.m,$ob.s].join(':');
  18. },
  19. prepare = function($l){
  20. if($l<10)$l=[0, $l].join('');
  21. return $l;
  22. },
  23. pozostalo =function($ms){
  24. var time=new Date($ms),
  25. $h = time.getUTCHours(),
  26. $m = time.getUTCMinutes(),
  27. $s = time.getUTCSeconds();
  28. return {h:prepare($h), m:prepare($m), s:prepare($s)};
  29. },
  30. koniec=new Date((new Date).getTime() + $ms);
  31. this.go = function(){
  32. var teraz = new Date,
  33. reszta = koniec.getTime()-teraz.getTime();
  34. if(reszta<0){
  35. reszta=0;
  36. clearTimeout($odliczanie);
  37. } else {
  38. $odliczanie = setTimeout($self.go, 1000);
  39. }
  40. wyswietl(pozostalo(reszta));
  41. }
  42. };
  43. function ini(){
  44. var $input = document.forms['counter'].timer,
  45. $t = new timers($input, 30); // tutaj podajesz liczbę sekund...
  46. $t.go();
  47. };
  48. window.onload=ini;
  49. </script>
  50. <?php
  51. }
  52. ?>


Plik pokazujący
  1. } else {
  2. //jezeli musi czekac
  3. echo '<div class="s1"><div class="s2"><div class="s3">';
  4. echo '<div class="ng">Poczekaj!</div>';
  5. echo '<center><form name="counter"><input type="text" value="" size="8" name="timer"></form>';
  6. echo '</center>';
  7. echo '</div></div></div>';
  8. }


I nie działa sad.gif Gdzie mam błąd ?
flashdev
Cytat(Jonek_1993 @ 30.10.2010, 13:48:10 ) *
[...]
I nie działa sad.gif Gdzie mam błąd ?


Czyli skopiowałeś skrypt z tamtego tematu i nie działa?
Albo tamten skrypt nie działa, albo Ty źle skopiowałeś.
Użyj tego mojego skryptu, do którego bezpośrednio zalinkowałem, a tą pierwszą możliwość będziesz mógł wykluczyć.

W taki sposób możesz wyowłać funkcję:
  1. <?php
  2. echo 'countDown('. $sekund .', function(t){' . "\n";
  3. ?>
Johnas
teraz skopiowałem z tego co podałeś i zrobiłem tak:
  1. <?php
  2. include 'db.php'; // połączenie się z bazą danych
  3. if ($_SESSION['login']){
  4. $tabela = 'user'; // zdefiniowanie tabeli MySQL
  5. $id = $_SESSION['id'];
  6. $passek = mysql_fetch_array(mysql_query("SELECT * FROM userdane WHERE iduser='$id'"));
  7. $tera = date("YmdHis");
  8. $p = strtotime($tera);
  9. $end = $passek['czekanie']-$p;
  10. $sekund = $end;
  11. print '<input type="text" id="tf" />';
  12. print '<script>';
  13. print "var sec = $sekund\n,";
  14. echo 'function countDown(sec, fh){';
  15.  
  16. ?>
  17.  
  18. function time(sec){
  19. var s = sec%60;
  20. sec = (sec-s)/60;
  21. var m = sec%60;
  22. sec = (sec-m)/60;
  23. var h = sec%24;
  24. sec = (sec-h)/24;
  25. return h + ':' + m + ':' + s;
  26. }
  27. var iid = setInterval(function(){
  28. --sec;
  29. fh(time(sec));
  30. if( !sec ){
  31. clearInterval(iid);
  32. }
  33. }, 1e3);
  34. fh(time(sec));
  35. }
  36.  
  37. countDown(155, function(t){
  38. document.getElementById('tf').value = t;
  39. });
  40. </script>
  41.  
  42. <?php
  43. }
  44. ?>

ale dalej nie chce odliczać sad.gif nie wiem co robię nie tak sad.gif zaczynam dopiero zabawe z JS
flashdev
Cytat(Jonek_1993 @ 30.10.2010, 14:17:55 ) *
[...]
ale dalej nie chce odliczać sad.gif nie wiem co robię nie tak sad.gif zaczynam dopiero zabawe z JS


Spójrz na linijkę 37. Ją miałeś podmienić winksmiley.jpg
Johnas
  1. <?php
  2. include 'db.php'; // połączenie się z bazą danych
  3. if ($_SESSION['login']){
  4. $tabela = 'user'; // zdefiniowanie tabeli MySQL
  5. $id = $_SESSION['id'];
  6. $passek = mysql_fetch_array(mysql_query("SELECT * FROM userdane WHERE iduser='$id'"));
  7. $tera = date("YmdHis");
  8. $p = strtotime($tera);
  9. $end = $passek['czekanie']-$p;
  10. $sekund = $end;
  11. print '<input type="text" id="tf" />';
  12. print '<script>';
  13. print "var sec = $sekund\n,";
  14. echo 'function countDown(sec, fh){';
  15.  
  16. ?>
  17.  
  18. function time(sec){
  19. var s = sec%60;
  20. sec = (sec-s)/60;
  21. var m = sec%60;
  22. sec = (sec-m)/60;
  23. var h = sec%24;
  24. sec = (sec-h)/24;
  25. return h + ':' + m + ':' + s;
  26. }
  27. var iid = setInterval(function(){
  28. --sec;
  29. fh(time(sec));
  30. if( !sec ){
  31. clearInterval(iid);
  32. }
  33. }, 1e3);
  34. fh(time(sec));
  35. }
  36.  
  37. <?php
  38. echo 'countDown('. $sekund .', function(t){' . "\n";
  39. ?>
  40. document.getElementById('tf').value = t;
  41. });
  42. </script>
  43.  
  44. <?php
  45. }
  46. ?>



Dodam że $sekund wynosi 180 czyli 3 minuty sad.gif ale nie odlicza tego czasu sad.gif
flashdev
Kod
countDown(155, function(t){
document.getElementById('tf').value = t;
});


W tej funkcji jest napisane co ma się dziać co sekundę. Jeśli usunąłeś pole input text, to rzeczywiście nic się nie stanie.

Podam kilka przykładów użycia:
Kod
countDown(155, function(t){
document.title = t; // pasek tytułu
status = t; // pasek statusu
alert(t); // okienko dialogowe
// etc...
});
Johnas
ale właśnie jest input w 11 lini i nie działa sad.gif nie wiem o co chodzi
flashdev
  1. <?php
  2. $sekundy = mt_rand(10, 15);
  3. ?>
  4. <input type="text" id="tf" />
  5. <script>function countDown(sec, fh){
  6. function time(sec){
  7. var s = sec%60;
  8. sec = (sec-s)/60;
  9. var m = sec%60;
  10. sec = (sec-m)/60;
  11. var h = sec%24;
  12. sec = (sec-h)/24;
  13. return h + ':' + m + ':' + s;
  14. }
  15. var iid = setInterval(function(){
  16. --sec;
  17. fh(time(sec));
  18. if( !sec ){
  19. clearInterval(iid);
  20. }
  21. }, 1e3);
  22. fh(time(sec));
  23. }
  24.  
  25. countDown(<?php echo $sekundy; ?>, function(t){
  26. document.getElementById('tf').value = t;
  27. });
  28. </script>
Johnas
działa tylko robię coś takiego aby odświeżyło po odliczaniu:
$msek wynosi 177000
  1. $msek = $sekundy*1000;
  2. header( "refresh:'$sekundy';url=irace.php" );
  3. ?>
  4. <script type="text/javascript">
  5.  
  6. var r=setTimeout("alert('Możesz już się ścigać...')",<?php $msek ?>);
  7.  
  8. </script>
  9. <?


Daje Tobie za czas poświęcony wszędzie pomógł winksmiley.jpg
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.