Avatar billede dugi Nybegynder
15. december 2004 - 23:15 Der er 3 kommentarer

Online timer, problemer med udregning

Hej Eksperter.

Sidder med et problem.
Jeg vil gerne lave et script, som tæller en brugers tid.

Når en bruger logger ind, blir tidspunktet gemt i en PHP session.
Denne session blir lagt i et <input type="hidden"> felt, som så hentes ind i javascriptet, hvorefter en udregning skal laves via. getTime();

Sådan ser mit script ud:

function onlinetimer()
  {
    var tidspunkt = document.getElementById("onlinetid").value;
    var findtime = new Date();
    var tidligenu = findtime.getTime();

    var differance          = tidligenu-tidspunkt;
    var onlinetid_timer      = Math.ceil(differance / (60 * 60));
    var onlinetid_minutter  = Math.ceil((differance - (onlinetid_timer * (60 * 60))) / 60);
    var onlinetid_sekunder  = differance - (onlinetid_timer * (60 * 60)) - (onlinetid_minutter * 60);

    if (onlinetid_timer < 10)    { onlinetid_timer = "0".onlinetid_timer; }
    if (onlinetid_minutter < 10)  { onlinetid_minutter = "0".onlinetid_minutter; }
    if (onlinetid_sekunder < 10)  { onlinetid_sekunder = "0".onlinetid_sekunder; }


    document.getElementById("visonlinetid").innerHTML = "" + onlinetid_timer + ":" + onlinetid_minutter + ":" + onlinetid_sekunder;
    setTimeout("onlinetimer()", 1000);
  }


Problemet sker når den skal udskrives. Den udskriver sådan her:
Online tid:
306123817:undefined:undefined


Selv tror jeg der sker en fejl, under selve udregningen, men kan umiddelbart ikke se fejlen :(


Håber der er nogen der kan hjælpe mig.
På forhånd tusind tak.


Med Venlig Hilsen
Morten Rugaard
Avatar billede dugi Nybegynder
15. december 2004 - 23:23 #1
en lille rettelse:

if (onlinetid_timer < 10)    { onlinetid_timer = "0"+onlinetid_timer; }
if (onlinetid_minutter < 10)  { onlinetid_minutter = "0"+onlinetid_minutter; }
if (onlinetid_sekunder < 10)  { onlinetid_sekunder = "0"+onlinetid_sekunder; }



Men virker stadig ik :(
Avatar billede skovenborg Nybegynder
15. december 2004 - 23:43 #2
Du kan prøve:
<script type="text/javascript">
function onlinetimer()
  {
    var tidspunkt = +document.getElementById("onlinetid").value;
    var findtime = new Date();
    var tidligenu = findtime.getTime();
    var differance          = tidligenu-tidspunkt;
    var onlinetid_timer      = Math.floor(differance / (1000*60*60));
    differance -= onlinetid_timer * 1000*60 * 60;
    var onlinetid_minutter  = Math.floor((differance) / (1000*60));
    differance -= onlinetid_minutter * 1000*60;
    var onlinetid_sekunder  = Math.floor(differance/(1000));


    if (onlinetid_timer < 10)    { onlinetid_timer = "0"+onlinetid_timer; }
    if (onlinetid_minutter < 10)  { onlinetid_minutter = "0"+onlinetid_minutter; }
    if (onlinetid_sekunder < 10)  { onlinetid_sekunder = "0"+onlinetid_sekunder; }

    document.getElementById("visonlinetid").innerHTML = "" + onlinetid_timer + ":" + onlinetid_minutter + ":" + onlinetid_sekunder;
    setTimeout("onlinetimer()", 1000);
  }

</script>

Men det kræver at du ganger dit sessiontid men 1000 (jeg regner med du henter den via time() funktionen), da den er opgivet i sekunder hvorimod javascript opgir deres i millisekunder efter 1970. Du kan selvfølgelig også gøre dette via java script:
var tidligenu = findtime.getTime()/1000;
Avatar billede skovenborg Nybegynder
15. december 2004 - 23:50 #3
nej, behold bare din php kode som den er. Vi bør hellere udnytte at vi ikke behøver gange eller dividere med 1000 hele tiden, hvis det hele er opgivet i sekunder:
function onlinetimer()
  {
    var tidspunkt = +document.getElementById("onlinetid").value;
    var findtime = new Date();
    var tidligenu = findtime.getTime()/1000;
    var differance          = tidligenu-tidspunkt;
    var onlinetid_timer      = Math.floor(differance / (60*60));
    differance -= onlinetid_timer * 60 * 60;
    var onlinetid_minutter  = Math.floor((differance) / (60));
    differance -= onlinetid_minutter * 60;
    var onlinetid_sekunder  = Math.floor(differance);


    if (onlinetid_timer < 10)    { onlinetid_timer = "0"+onlinetid_timer; }
    if (onlinetid_minutter < 10)  { onlinetid_minutter = "0"+onlinetid_minutter; }
    if (onlinetid_sekunder < 10)  { onlinetid_sekunder = "0"+onlinetid_sekunder; }

    document.getElementById("visonlinetid").innerHTML = "" + onlinetid_timer + ":" + onlinetid_minutter + ":" + onlinetid_sekunder;
    setTimeout("onlinetimer()", 1000);
  }
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester