Click here to Skip to main content
15,895,142 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
how can implement a multiple stop watch in a php site for displaying different time consume by the technicians to resolve the problem.


in my site there are work assign for completion to technician where i want to know about how much time taken by the technician in solving the problem.i implement a simple stop watch with the help of java script and is working untill when we stay on page but when we go another page then it is stopped.
and next problem is that when i try it to multiple stopwatch implement in the same page then only one is working.
sorry for gramitical error becoz my english is week.

the code is here



JavaScript
var swCycleTime=50; //run cycle every 50ms?

// Functional Code

var sw,swObj,swct,swnow,swcycle; //create some variables, we'll figure out what they are soon
var swObjAry=new Array(); //and i assume that for every stopwatch on the page an object is created and this is the container array

function swStart(id,ud){ //ok so you click the button which would onclick="swstart($divname,+);" the plus is for count upwards, you can - it
swObj=document.getElementById(id); //so the swobj var is your actual div by the look of it
swct=swObj.innerHTML.split(':'); //and it splits the time into minutes, seconds, milliseconds into an array
swnow=new Date(); //this is the time the button got clicked
swObj.now=swnow.getTime(); //and it fires that variable into swobj's now value
swObj.reset=swObj.innerHTML; //it takes a note of whats in the div so that when you reset, it puts the initial value back in
swObj.ud=ud; //the stopwatch object is told wether to count up or down
if (!isNaN(swObj.innerHTML)){ //if the initial value turns out to be a string,
swObj.time=parseInt(swObj.innerHTML); //parse it to an int
}
else if (swct.length==4){ //otherwise if our split is 4 long, for hours!
swObj.time=(swct[0]*1000*60)+(swct[1]*1000*60)+(swct[2]*1000)+parseInt(swct[3]); //the stopwatches time so far is mins + secs +ms (total being in ms)
}
else if (swct.length==3){ //otherwise if our split is 3 long
swObj.time=(swct[0]*1000*60)+(swct[1]*1000)+parseInt(swct[2]); //the stopwatches time so far is mins + secs +ms (total being in ms)
}
else if (swct.length==2){ //or if its just seconds and milliseconds
swObj.time=(swct[0]*1000)+parseInt(swct[1]);
}
else if (swct.length==1){ //or just milliseconds
swObj.time=parseInt(swct[1]);
}
if (!swObj.time){ //if it has only just started at 0
swObj.time=1; //give it a millisecond to get it started
}
if (!swObj.c){ //if there isnt a c value (whatever c is :-P )
swObj.c=ud; //then make it + or -, whatever ud was
swObjAry[swObjAry.length]=swObj; //i dont get this - make the number of stopwatches = swobj, the div? :-s
}
}

function swStop(id){ //anyway, so if you click the stop button (onclick="swstop($divname)"),
swObj=document.getElementById(id); //get the stopwatch div name
if (!swObj.time){ return; } //if there is no time variable, its already stopped. coolio.
swObj.time=null; //get rid of the time value
sw=new Date().getTime(); //this next bit will have to do with when you resume i suppose
swObj.cycle+=(sw-swcycle);
if (swObj.ud=='-'){
swObj.cycle-=(sw-swcycle);
if (swObj.cycle<0){ swObj.cycle=0; }
}
swObj.innerHTML=(parseInt(swObj.cycle/1000/60/60)%60)+':'+(parseInt(swObj.cycle/1000/60)%60)+':'+((parseInt((swObj.cycle)/1000)%60)+':'+(swObj.cycle%1000));
//display the time you stopped on, i added an extra bit here hor the hour
}

function swCycle(){ //and this will be the running cylce then
swcycle=new Date().getTime();
for (sw0=0;sw0<swobjary.length;sw0++){>
if (swObjAry[sw0].time){
swObjAry[sw0].cycle=swObjAry[sw0].time+(swcycle-swObjAry[sw0].now);
if (swObjAry[sw0].ud=='-'){
swObjAry[sw0].cycle=swObjAry[sw0].time-(swcycle-swObjAry[sw0].now);
if (swObjAry[sw0].cycle<0){ swObjAry[sw0].cycle=0; swObjAry[sw0].time=0; }
}

swObjAry[sw0].innerHTML=(parseInt(swObjAry[sw0].cycle/1000/60/60)%60)+':'+(parseInt(swObjAry[sw0].cycle/1000/60)%60)+':'+((parseInt((swObjAry[sw0].cycle)/1000)%60)+':'+(swObjAry[sw0].cycle%1000)); //added an hour bit here too
}
}
}

function swReset(id,dt){
swObj=document.getElementById(id);
swObj.innerHTML=swObj.reset;
swObj.time=null;
}

setInterval('swCycle()',swCycleTime);


XML
<input type="button" value="Start"  önclick="swStart('beg2','+');">
<input type="button" value="Stop"  önclick="swStop('beg2');">
<input type="button" value="Reset"  önclick="swReset('beg2');">
<div id="beg2">0:00:00:000</div>
Posted
Updated 15-Jun-12 23:07pm
v6
Comments
Mohibur Rashid 16-Jun-12 2:40am    
how do you show one?
ambujmalviya 16-Jun-12 2:49am    
one watch will be displayed and working properly but when i try it to multiple watches then it stops work
ambujmalviya 16-Jun-12 2:50am    
it display with the help of javascript
Stephen Hewison 16-Jun-12 4:11am    
This isn't a good question. If you're using a control for the stop watch you need to tell us which control. It may be as simple as the control you've implemented doesn't support multiplicity. In which case there is no solution. But nonetheless, there isn't enough information in the question to provide an answer. Please use the "improve question" link to provide more information about what you're using and the behaviour you're experiencing.
ambujmalviya 16-Jun-12 4:29am    
in my site there are work assign for completion to technician where i want to know about how much time taken by the technician in solving the problem.i implement a simple stop watch with the help of java script and is working untill when we stay on page but when we go another page then it is stopped.
and next problem is that when i try it to multiple stopwatch implement in the same page then only one is working.
sorry for gramitical error becoz my english is week.

1 solution

These variables sw,swObj,swct,swnow,swcycle are your problem.

You only have one instance of them. But they are required for all timers. When you create a new timer you're over writing the state of these variables and killing the previous timer.

When you create a new timer, you need to make sure that all the variables used by that timer are unique to that timer.
 
Share this answer
 
Comments
ambujmalviya 16-Jun-12 5:17am    
i am using these stop watch in a dynamic page where they are decrease or increase on the basis of pending issue there are not a fixed stop watch in the page when the case close then total entry automatically deleted.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900