countdown script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pong Zor

Pong Zor

26/11/2012 15:11:39
Quote Anchor link
Ik heb het volgende idee:
Ik wil mensen tegen elkaar laten strijden b.v.

persoon 1 upload een foto
persoon 2 upload een foto

Ze dagen elkaar uit wie de mooiste foto heeft. Deze uitdaging duurt 72 uur. Daarna is er een winnaar.

Nu zit ik een beetje met de uitdaging. Hoe kan ik ervoor zorgen dat er een soort van script draait en die na 72 automatisch de uitdaging offline gaat gooien? Uiteraard zal je dan een query moeten doen als de tijd verstreken is. Daar kom ik wel uit, alleen vraag ik mij af hoe ik een soort van countdown kan instellen.

Iemand tips?
 
PHP hulp

PHP hulp

26/04/2024 13:28:46
 
- Ariën  -
Beheerder

- Ariën -

26/11/2012 15:20:09
Quote Anchor link
Er zijn vast wel countdown scripts in Javascript (e.v.t. icm jQuery).
Deze op de gelijke datum zetten, en klaar.
 
Pong Zor

Pong Zor

26/11/2012 15:21:21
Quote Anchor link
Oke, maar wat dan als je b.v. 20 uitdagingen tegelijk hebt lopen? Gaat dat dan ook lukken? En dan b.v. niet allemaal op dezelfde tijd, maar verschillende tijden
Gewijzigd op 26/11/2012 15:21:44 door Pong Zor
 
- Ariën  -
Beheerder

- Ariën -

26/11/2012 15:23:23
Quote Anchor link
Dat kan ook.....
 
Pong Zor

Pong Zor

26/11/2012 15:24:43
Quote Anchor link
Maar dan moet ik zeker met een ajax callback de afhandeling gaan doen?
 
- Ariën  -
Beheerder

- Ariën -

26/11/2012 15:47:15
Quote Anchor link
Zou kunnen, als het goed is kan je de datum uit MySQL ook in de functie van de countdown genereren.
 
Kris Peeters

Kris Peeters

26/11/2012 16:33:54
Quote Anchor link
Okay, dat zijn dus twee dingen. Een javascript timer en een database probleem.
De timer: zie onderaan (of zoek zelf iets; er zijn er genoeg)

Je maakt een database-tabel 'uitdagingen'
met velden: id, target_time, user1, user2

Dus, je ziet dat de twee gebruikers gelinkt zijn aan dit record.

Ik veronderstel een situatie waarbij 1 gebruiker een uitdaging start; daarna neemt een andere gebruiker de uitdaging aan.
Bij het inserten van dit record (met slechts 1 user gekend) bereken je een target, 72u later.
Dan neemt user2 de uitdaging aan en wordt zijn user_id ingevuld in dit record.

Zolang beide users die zelfde target time hebben, blijft alles voor hen synchroon

Bij elke actie (uploaden, pagina herladen, ...) zoek je contact met de database en kijk je of de target tijd niet overschreden is

---

Een simperl voorbeeld van een countdown:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<div id="message"></div>
<script>
// countdown in gang zetten
 countdown('2012-11-29 18:25:35'); // deze target datetime staat in de DB, voor beide gebruikers

function countdown(targetTime) {
  var result = Object();
  var rest;
  var timeDiff;
  if (typeof(targetTime) == 'number') { // verschil in seconden is gekend
    timeDiff = targetTime;
    if (timeDiff < 1) {
      // eventueel roep je hier nog een "ik ben klaar"- functie aan.
      return; // zo wordt de timer gestopt
    }
  }
  else { // verschil in seconden wordt berekend adhv. een dateTime string
    var target = new Date(targetTime);
    var now = new Date();
    var timeDiff = Math.floor((target.getTime() - now.getTime()) / 1000);
  }
  result.seconds = timeDiff % 60;
  rest = timeDiff - result.seconds;
  result.minutes = (rest / 60) % (60);
  rest = rest - result.minutes * 60;
  result.hours = (rest / 3600) % (24);
  rest = rest - result.hours * 3600;
  result.days = rest / (24*3600);
  // en zo kan je nog verder gaan ...
  displayTime(result);
  setTimeout(function() {
    countdown(timeDiff - 1)
  }, 1000);
}
function displayTime(timeObject) {
  // Uiteraard kan je dit aanpassen naar je noden
  document.getElementById('message').innerHTML =
    + timeObject.days + 'd - '
    + timeObject.hours + ':'
    + timeObject.minutes + ':'
    + timeObject.seconds + 'u';
}
</script>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.