Stopwatch & Timer
Precision stopwatch with laps plus a countdown timer with alarm — free in your browser.
How to Use the Stopwatch & Timer in 3 Steps
- Choose Stopwatch mode to count up, or Timer mode to count down from a set duration.
- Press Start — tap Lap anytime to record split times without stopping the clock.
- Press Stop to pause, Reset to clear, and review your lap list below.
Frequently Asked Questions
What is the difference between a stopwatch and a timer?
A stopwatch measures elapsed time with millisecond precision, while a timer counts down from a set duration and alerts you at zero. Our tool includes both modes: use the stopwatch for races and workouts, the timer for cooking, study sessions and reminders.
Can I record lap times?
Yes. Press the lap button while the stopwatch runs to record split times without stopping the clock. Each lap is listed with its own duration and the total elapsed time, which is ideal for runners, swimmers and circuit training. Coaches use laps to compare athlete performance across training sessions, and the list can be reviewed after you stop.
How does the timer mode work?
Set hours, minutes and seconds, then start the countdown. When it reaches zero you get a visual and sound alert. It works for Pomodoro study blocks, cooking, presentations and exercise intervals. You can pause and resume the countdown, and resetting takes you back to your original duration in one tap.
How accurate is the online stopwatch?
The tool uses your device's high-resolution clock, accurate to the millisecond for display. For casual timing, workouts and cooking it is more than precise enough. For official race timing, certified hardware is still recommended. Displayed milliseconds are for readability — the underlying timing uses your device clock, which is precise for everyday use.
Does it work offline and in the background?
Yes, it works offline once the page has loaded, and it keeps running in the background on most devices. Keep the tab open for the alert sound to play when a timer finishes. On phones, keep the screen awake during long timers so the alert plays exactly when the countdown ends.
Is the stopwatch free with no signup?
Nothing is recorded or uploaded — timing happens locally in your browser. No signup, no ads interrupting your session, and the page stays lightweight so it loads in under a second. The tool loads in under a second and stays responsive even during long timing sessions.
Related Tools
(function(){
function $(id){return document.getElementById(id);}
$('tabSw').onclick=function(){$('paneSw').style.display='';$('paneTm').style.display='none';$('tabSw').className='btn';$('tabTm').className='btn btn-o';};
$('tabTm').onclick=function(){$('paneTm').style.display='';$('paneSw').style.display='none';$('tabTm').className='btn';$('tabSw').className='btn btn-o';};
var swT=0,swRun=false,swLast=0,swInt=null;
function swFmt(ms){var cs=Math.floor(ms/10)%100,s=Math.floor(ms/1000)%60,m=Math.floor(ms/60000);var p=function(x){return String(x).padStart(2,'0');};return p(m)+':'+p(s)+'.'+p(cs);}
function swTick(){$('swD').textContent=swFmt(swT+(swRun?Date.now()-swLast:0));}
$('swStart').onclick=function(){
if(swRun){swT+=Date.now()-swLast;swRun=false;clearInterval(swInt);$('swStart').textContent='Start';}
else{swRun=true;swLast=Date.now();swInt=setInterval(swTick,31);$('swStart').textContent='Pause';}
swTick();
};
$('swReset').onclick=function(){swRun=false;clearInterval(swInt);swT=0;$('swD').textContent='00:00.00';$('swStart').textContent='Start';$('swLaps').innerHTML='';};
$('swLap').onclick=function(){
if(!swRun&&swT===0)return;
var t=swT+(swRun?Date.now()-swLast:0);
var li=document.createElement('li');
li.style.cssText='display:flex;justify-content:space-between;padding:8px 4px;border-bottom:1px solid var(--line);font-size:14px';
var a=document.createElement('span');a.textContent='Lap '+($('swLaps').children.length+1);
var b=document.createElement('b');b.textContent=swFmt(t);
li.appendChild(a);li.appendChild(b);$('swLaps').appendChild(li);
};
var tmTotal=0,tmLeft=0,tmRun=false,tmInt=null;
function tmFmt(s){s=Math.max(0,Math.ceil(s));var h=Math.floor(s/3600),m=Math.floor(s%3600/60),ss=s%60;var p=function(x){return String(x).padStart(2,'0');};return (h?p(h)+':':'')+p(m)+':'+p(ss);}
function tmTick(){$('tmD').textContent=tmFmt(tmLeft);}
function beep(){try{var c=new (window.AudioContext||window.webkitAudioContext)();for(var i=0;i<3;i++){var o=c.createOscillator(),g=c.createGain();o.connect(g);g.connect(c.destination);o.frequency.value=880;var t=c.currentTime+i*0.35;g.gain.setValueAtTime(0.001,t);g.gain.exponentialRampToValueAtTime(0.5,t+0.02);g.gain.exponentialRampToValueAtTime(0.001,t+0.3);o.start(t);o.stop(t+0.32);}}catch(e){}}
$('tmStart').onclick=function(){
if(tmRun){tmRun=false;clearInterval(tmInt);$('tmStart').textContent='Resume';return;}
if(tmLeft<=0){var h=+$('tmH').value||0,m=+$('tmM').value||0,s=+$('tmS').value||0;tmTotal=h*3600+m*60+s;tmLeft=tmTotal;}
if(tmLeft<=0)return;
tmRun=true;$('tmStart').textContent='Pause';
var end=Date.now()+tmLeft*1000;
tmInt=setInterval(function(){tmLeft=(end-Date.now())/1000;tmTick();if(tmLeft<=0){clearInterval(tmInt);tmRun=false;tmLeft=0;tmTick();$('tmStart').textContent='Start';beep();}},100);
tmTick();
};
$('tmReset').onclick=function(){clearInterval(tmInt);tmRun=false;tmLeft=0;$('tmStart').textContent='Start';tmTick();};
tmTick();
})();