Avatar billede zed_one Praktikant
13. marts 2014 - 12:34 Der er 8 kommentarer

Tidsfunction i javascript - fejl

Først, så er jeg stadig ny i JavaScript - brugte vbscript før.

Dernæst, så benytter jeg ikke Javascript webbaseret, men lokalt på en server, men det har vist intet at sige i det her tilfælde.

Har denne function (klippet og ændret, fra et sted på nettet):

millisToTime = function(ms){

    x = ms / 1000;
    seconds = Math.round(x % 60);
    x /= 60;
    minutes = Math.round(x % 60);
    x /= 60;
    hours = Math.round(x % 24);

    return hours + ":" + minutes + ":" + seconds;
}

Når jeg sender en milisekund-værdi der vil ende ud i et svar på over en time, bliver - i hvert fald - minutterne helt forkerte i denne function.

Er der nogen der kan pege på hvor det går galt?
Avatar billede erikjacobsen Ekspert
13. marts 2014 - 13:36 #1
Den går galt, hvis der er mere end 24 timer - men kan du ellers give et eksempel, der ikke virker?
Avatar billede zed_one Praktikant
13. marts 2014 - 14:21 #2
Det er fra et automatiseringssystem og jeg bruger funktionen til tidstagning - hvor lang tid workflowet tog at udføre (behandling af en stribe pdf'er). Så har ikke et ordentligt taleksempel - disse forsvinder efter kørsel. Jeg kan blot se på den mail jeg har sat systemet til at sende af resultatet, at jeg ender med et forkert tal når jeg når udover en time. En nylig proces der ca tog 1 time og 10 minutter, endte på 1:54:53

Måske er det så rettere måden jeg genererer milisekunderne på?
Ser nedenstående forkert ud?

I starten af workflowet har jeg dette script:
var d = new Date();
Watch.SetVariable("tid", d.getTime());

I slutningen af workflowet har jeg dette script:
var d = new Date();
var tidsForbrug = millisToTime(d.getTime()-parseInt(Watch.GetVariable("tid")));
Watch.SetVariable("tid", tidsForbrug);

"Watch" er til interne funktioner i Planetpress (som automatiseringssystemet hedder), men det siger vist sig selv hvad de gør. Planetpress benytter sig af styresystemets egen Javascript-fortolker, skulle den info være nyttig.
Avatar billede erikjacobsen Ekspert
13. marts 2014 - 15:08 #3
Du kunne jo også udskrive antal millisekunder, så du kan se om det er det tal, eller funktionen, der er forkert. Men en time og 10 minutter giver nu det rigtige resultat (testet i en browser):

    millisToTime = function(ms){

    x = ms / 1000;
    seconds = Math.round(x % 60);
    x /= 60;
    minutes = Math.round(x % 60);
    x /= 60;
    hours = Math.round(x % 24);

    return hours + ":" + minutes + ":" + seconds;
   
    }

    document.write(millisToTime(60*60*1000+10*60*1000));
Avatar billede zed_one Praktikant
13. marts 2014 - 15:39 #4
Super - jeg må fejlsøge på den vis så, i en tid (opgaven ankommer én gang om dagen).

Mange tak for input! :-)

(og jeg kan se at du stadig ikke samler på point)
Avatar billede erikjacobsen Ekspert
13. marts 2014 - 15:59 #5
Nej tak ;) 

Prøv evt uden parseInt - det skulle dog ikke gøre nogen forskel.
Avatar billede zed_one Praktikant
13. marts 2014 - 16:14 #6
Planetpress har det med at gemme alle sine variabler som tekst, deraf min parseInt, når jeg hiver dets variabler ind i et script :-)
Avatar billede zed_one Praktikant
13. marts 2014 - 16:16 #7
... eller parser i hvert fald som string, når man hiver det ind i scripts.
Avatar billede MadsHaupt Juniormester
14. marts 2014 - 17:04 #8
Jeg vil i hvert fald bruge Math.floor i stedet for Math.round.
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

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