Crear un cronómetro en HTML: guía práctica con código y ejemplos claros

| Última modificación: 11 de agosto de 2025 | Tiempo de Lectura: 4 minutos

Crear un cronómetro en HTML es una tarea educativa y práctica que te permite entender mejor cómo funcionan el HTML, CSS y JavaScript en conjunto. He trabajado personalmente en proyectos de desarrollo web donde implementar un cronómetro personalizado fue clave para crear aplicaciones interactivas, y hoy quiero compartir contigo un tutorial completo para que puedas crear tu propio cronómetro en HTML de manera fácil y rápida.

Este artículo está diseñado pensando en ti, sea que estés dando tus primeros pasos en la programación web o tengas algo de experiencia y quieras mejorar tus habilidades. Veremos desde los conceptos básicos hasta funcionalidades avanzadas, todo con ejemplos claros y código listo para usar.

¿Qué es un cronómetro y para qué sirve en la web?

Un cronómetro es una herramienta que mide el tiempo transcurrido entre dos eventos, pudiendo iniciar, pausar y reiniciar el conteo. En el ámbito web, se usa en aplicaciones de fitness, juegos, estudios, entrevistas en línea, y donde se requiera medir tiempos o contar hacia atrás. Implementar un cronómetro usando HTML para la estructura, CSS para el estilo visual y JavaScript para la lógica te permite obtener un control total sobre su comportamiento e integración en tus proyectos.

¿Qué necesitas para crear un cronómetro en HTML?

Crear un cronómetro en HTML
  • Un editor de texto sencillo o un entorno de desarrollo (Visual Studio Code, Sublime Text, etc.).
  • Un navegador moderno (Chrome, Firefox, Edge).
  • Conocimientos básicos de HTML, CSS y JavaScript. No te preocupes si estás empezando: te explicaré cada paso de forma clara.
  • Tiempo y ganas de aprender implementando con práctica.

Código básico: Cómo crear un cronómetro en HTML y JavaScript paso a paso

Voy a mostrarte un ejemplo completo y funcional que incluye:

  • Visualización del tiempo en formato hh:mm:ss.
  • Botones para iniciar, pausar y reiniciar el cronómetro.
  • Explicación detallada de cada sección para que puedas modificarlo y ampliarlo.

    <!DOCTYPE html>
    <html lang=»es»>
    <head>
    <meta charset=»UTF-8″>
    <title>Cronómetro Simple en HTML</title>
    <style>
    body {
    font-family: Arial, sans-serif;
    text-align: center;
    margin-top: 50px;
    }
    #display {
    font-size: 3em;
    font-family: monospace;
    margin-bottom: 20px;
    }
    button {
    margin: 5px;
    padding: 10px 20px;
    font-size: 1.2em;
    cursor: pointer;
    border: none;
    background-color: #007BFF;
    color: white;
    border-radius: 4px;
    transition: background-color 0.3s ease;
    }
    button:hover {
    background-color: #0056b3;
    }
    </style>
    </head>
    <body>

    <div id=»display»>00:00:00</div>
    <button id=»startBtn»>Iniciar</button>
    <button id=»pauseBtn»>Pausar</button>
    <button id=»resetBtn»>Reiniciar</button>

    <script>
    // Variables que almacenan tiempos y controlan el estado
    let startTime = 0;
    let elapsedTime = 0;
    let timerInterval;
    let running = false;

    // Función que actualiza el cronómetro cada segundo
    function updateTime() {
    const currentTime = Date.now();
    elapsedTime = currentTime – startTime;

    // Cálculo de horas, minutos y segundos
    const hours = Math.floor(elapsedTime / (1000 * 60 * 60));
    const minutes = Math.floor((elapsedTime % (1000 * 60 * 60)) / (1000 * 60));
    const seconds = Math.floor((elapsedTime % (1000 * 60)) / 1000);

    // Mostrar en formato hh:mm:ss con ceros delante
    document.getElementById(‘display’).textContent =
    `${hours.toString().padStart(2,’0′)}:` +
    `${minutes.toString().padStart(2,’0′)}:` +
    `${seconds.toString().padStart(2,’0′)}`;
    }

    // Iniciar cronómetro
    document.getElementById(‘startBtn’).addEventListener(‘click’, () => {
    if (!running) {
    startTime = Date.now() – elapsedTime;
    timerInterval = setInterval(updateTime, 1000);
    running = true;
    }
    });

    // Pausar cronómetro
    document.getElementById(‘pauseBtn’).addEventListener(‘click’, () => {
    if (running) {
    clearInterval(timerInterval);
    running = false;
    }
    });

    // Reiniciar cronómetro
    document.getElementById(‘resetBtn’).addEventListener(‘click’, () => {
    clearInterval(timerInterval);
    running = false;
    elapsedTime = 0;
    document.getElementById(‘display’).textContent = «00:00:00»;
    });
    </script>

    </body>
    </html>

Detalles clave del código

  • setInterval(updateTime, 1000): ejecuta la función updateTime cada 1000 ms para refrescar el tiempo mostrado.
  • Uso de Date.now() para obtener el timestamp actual en milisegundos y calcular la diferencia.
  • padStart(2,'0') asegura que siempre muestre dos dígitos (por ejemplo, “08” en lugar de “8”).
  • Variables como running para evitar múltiples intervalos simultáneos.

Este ejemplo funcionó perfectamente cuando lo implementé en un sitio web de mi portafolio, y me permitió entender conceptos esenciales de temporizadores en JavaScript.

Cómo añadir estilo y mejorar la experiencia del usuario

Para hacer tu cronómetro más atractivo y usable, te recomiendo:

  • CSS personalizado: añade colores, fuentes y tamaños que se adapten al diseño de tu página.
  • Animaciones: por ejemplo, cambiar el color o añadir un efecto “parpadeo” cuando el cronómetro está en pausa.
  • Mostrar milisegundos: para mayor precisión, puedes reducir el intervalo a 10 ms y mostrar decenas de segundos.
  • Responsividad: asegúrate que el cronómetro se vea bien en móviles y tablets.

Por ejemplo, para mostrar milisegundos modifica el intervalo y función así:

timerInterval = setInterval(updateTime, 10);

Y el cálculo de milisegundos:

const milliseconds = Math.floor((elapsedTime % 1000) / 10);
document.getElementById(‘display’).textContent =
`${hours.toString().padStart(2,’0′)}:` +
`${minutes.toString().padStart(2,’0′)}:` +
`${seconds.toString().padStart(2,’0′)}.` +
`${milliseconds.toString().padStart(2, ‘0’)}`;

Funcionalidades avanzadas para tu cronómetro en HTML

Una vez que domines el básico, puedes incorporar funciones como:

  • Cuenta regresiva: permite que el cronómetro cuente hacia atrás desde un tiempo definido.
  • Guardar los tiempos en localStorage: para que el cronómetro mantenga su estado aun si recargas la página.
  • Exportar resultados: generar un archivo CSV o JSON con los tiempos registrados para análisis posteriores.
  • Alertas visuales o sonoras: para indicar que el tiempo terminó o que se alcanzó un límite.

Aquí tienes un ejemplo básico de guardar y recuperar el tiempo con localStorage:

window.onload = () => {
if(localStorage.getItem(‘elapsedTime’)) {
elapsedTime = parseInt(localStorage.getItem(‘elapsedTime’), 10);
document.getElementById(‘display’).textContent = formatTime(elapsedTime);
}
};

function updateTime() {
// … código existente …
localStorage.setItem(‘elapsedTime’, elapsedTime);
}

Consejos y buenas prácticas para tu cronómetro web

  • Optimiza el rendimiento: evita ejecutar funciones innecesarias y para los intervalos cuando el cronómetro esté pausado.
  • Compatible con todos los navegadores: utiliza funciones bien soportadas por los principales navegadores modernos.
  • Accesibilidad: asegúrate de que los botones sean fácilmente accesibles y usables para personas con diferentes capacidades.
  • Prueba constantemente: valida el correcto funcionamiento en diferentes escenarios y dispositivos.

Conclusión: Crea tu cronómetro en HTML con confianza y creatividad

Si quieres profundizar en estas tecnologías y estar preparado para liderar esta transformación, te invito a conocer el Bootcamp Desarrollo Web de KeepCoding.

bootcamps web

Crear un cronómetro en HTML con JavaScript es un excelente ejercicio para mejorar tus habilidades en desarrollo web. Desde el código básico que te he mostrado hasta las posibilidades avanzadas que puedes implementar, tienes todo lo necesario para tener un cronómetro funcional, personalizado y eficiente.

Para seguir profundizando en JavaScript y programación web, te recomiendo visitar la documentación oficial de Mozilla Developer Network (MDN).

¡CONVOCATORIA ABIERTA!

Desarrollo web

Full Stack Bootcamp

Clases en Directo | Acceso a +600 empresas | 98,49% empleabilidad

KeepCoding Bootcamps
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.