Teller rekent verkeerd?
Goedemiddag,
Ik ben dus bezig met een soort Obay-script. Wanneer de gebruiker zoekt naar objecten krijgt hij een hele lijst te zien die aan zijn zoekcriteria voldoen.
Dingen zoals: type,verkoper,vraagprijs,huidig bod worden allemaal weergegeven. En ook de tijd die overblijft om te bieden.
Ik wou het een beetje mooi maken met javascript. Ik heb de tijd dat het object op de veiling is geplaatst en de tijd dat het op de veiling blijft staan en ik bereken de resterende seconden.
Het volgende javascript zorgt ervoor dat er visueel wordt afgeteld.
Ik test het script een keer en op het eerste zicht lijkt het te werken, de tijd wordt netjes afgeteld. Maar dan ontdekte ik iets vreemds. Ik refreshte de pagina wanneer er nog 16H 0M 0S op de teller stonden en plots kwam er 16H 2M 24S te staan. Hoe kan dit? En beter nog, hoe kan ik dit oplossen zodat de tijd perfect blijft kloppen?
(PS. Als het nodig is zet ik timeleft.js ook wel hierop, maar het is nogal veel.)
EDIT:
Ik zie net, dat telkens ik refresh er tijd bijkomt. Waar ligt mijn fout dan?
Ik ben dus bezig met een soort Obay-script. Wanneer de gebruiker zoekt naar objecten krijgt hij een hele lijst te zien die aan zijn zoekcriteria voldoen.
Dingen zoals: type,verkoper,vraagprijs,huidig bod worden allemaal weergegeven. En ook de tijd die overblijft om te bieden.
Ik wou het een beetje mooi maken met javascript. Ik heb de tijd dat het object op de veiling is geplaatst en de tijd dat het op de veiling blijft staan en ik bereken de resterende seconden.
Het volgende javascript zorgt ervoor dat er visueel wordt afgeteld.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
<script language=javascript type=text/javascript src=timeleft.js></script>
<script language=javascript type=text/javascript>
var oTimer = new Timer("nc");
oTimer.setTime($row['verschil']);
oTimer.setRefresh(false);
oTimer.setFinal("<font color=red>Veiling afgelopen!</font>");
aTimers["nc"] = oTimer;
</script>
<script language=javascript type=text/javascript>var hTimerInterval = setInterval(DownTimer, 1000);</script>
// $row['verschil'] is de resterende tijd in seconden berekent tussen NOW() en de starttijd van de veiling van dit object. Zie hieronder.
// $sql = mysql_query("SELECT TIME_TO_SEC(TIMEDIFF(NOW(),starttijd)) AS verschil FROM objecten WHERE id='$objectid' ");
// $row = mysql_fetch_assoc($sql);
?>
<script language=javascript type=text/javascript src=timeleft.js></script>
<script language=javascript type=text/javascript>
var oTimer = new Timer("nc");
oTimer.setTime($row['verschil']);
oTimer.setRefresh(false);
oTimer.setFinal("<font color=red>Veiling afgelopen!</font>");
aTimers["nc"] = oTimer;
</script>
<script language=javascript type=text/javascript>var hTimerInterval = setInterval(DownTimer, 1000);</script>
// $row['verschil'] is de resterende tijd in seconden berekent tussen NOW() en de starttijd van de veiling van dit object. Zie hieronder.
// $sql = mysql_query("SELECT TIME_TO_SEC(TIMEDIFF(NOW(),starttijd)) AS verschil FROM objecten WHERE id='$objectid' ");
// $row = mysql_fetch_assoc($sql);
?>
Ik test het script een keer en op het eerste zicht lijkt het te werken, de tijd wordt netjes afgeteld. Maar dan ontdekte ik iets vreemds. Ik refreshte de pagina wanneer er nog 16H 0M 0S op de teller stonden en plots kwam er 16H 2M 24S te staan. Hoe kan dit? En beter nog, hoe kan ik dit oplossen zodat de tijd perfect blijft kloppen?
(PS. Als het nodig is zet ik timeleft.js ook wel hierop, maar het is nogal veel.)
EDIT:
Ik zie net, dat telkens ik refresh er tijd bijkomt. Waar ligt mijn fout dan?
Gewijzigd op 01/01/1970 01:00:00 door Jens
Telkens als je refresht komt er tijd bij -> Je javascript teller loopt te snel, waardoor de tijd bij vernieuwen niet meer overeenkomt. Bij vernieuwen wordt de resttijd opnieuw opgehaald, deze klopt wel met de begintijd. Een optie kan/ zou kunnen zijn dat je om de 2 minuten (het verschil is dan ws niet zo groot nog) opnieuw ophaalt met AJAX.
Nee, dat is het niet.
Want kijk:
Ik heb nu met databasegefoefel ervoro gezorgd dat er precies nog 1 dag resterend is. En we gaan kijken en idd er stond 23H 59S.
Ik refresh en dan staat er 1D 0H 4M. (Dit kan al nooit, aangezien er het maximum een dag kan zijn! De javascriptteller loopt dus zeker niet te snel)
Ik refresh nog een maal en nu staat er zelfs 1D 1H 14M.
Morgen staat er dus 2D 1H 14M..
Ergens maak ik een rekenfoutje..
EDIT: Domme kip die ik ben. Ik berekende de tijd tussen een datum in het verleden en nu. Geen wonder dat het steeds groter werd.. Ik heb het ondertussen al. Bedankt voor de hulp!
Want kijk:
Ik heb nu met databasegefoefel ervoro gezorgd dat er precies nog 1 dag resterend is. En we gaan kijken en idd er stond 23H 59S.
Ik refresh en dan staat er 1D 0H 4M. (Dit kan al nooit, aangezien er het maximum een dag kan zijn! De javascriptteller loopt dus zeker niet te snel)
Ik refresh nog een maal en nu staat er zelfs 1D 1H 14M.
Morgen staat er dus 2D 1H 14M..
Ergens maak ik een rekenfoutje..
EDIT: Domme kip die ik ben. Ik berekende de tijd tussen een datum in het verleden en nu. Geen wonder dat het steeds groter werd.. Ik heb het ondertussen al. Bedankt voor de hulp!
Gewijzigd op 01/01/1970 01:00:00 door Jens




