Crear un Reloj Digital en Javascript no solo es un proyecto fascinante para quienes se inician en el mundo de la programación web, sino también una excelente oportunidad para entender cómo interactúan el HTML, CSS y Javascript en la creación de componentes dinámicos para nuestros sitios web. En este blogpost, exploraremos cómo desarrollar un reloj digital desde cero, implementando un diseño elegante y funcional que puede ser personalizado según las necesidades de cada uno.
Te recomiendo que revises mi blog entero, actualmente tengo más de 150 aplicaciones de libre distribución que te podrían servir, aplicaciones en PHP, Javascript, Python, Node JS, así como tutoriales de que te podrían servir.
Introducción
Un reloj digital es un elemento básico pero poderoso que puede añadir funcionalidad y estética a cualquier página web. Ya sea que estés construyendo un sitio web desde cero o buscando añadir componentes interactivos a una página existente, un reloj digital en Javascript es una excelente manera de mejorar la experiencia del usuario manteniéndolo informado con la hora actual.
Video Explicativo
Estructura HTML
Todo comienza con la estructura básica de nuestro proyecto. El HTML nos proporciona el esqueleto sobre el cual construiremos nuestro reloj digital. Para este propósito, definimos un elemento <div> con una clase y un ID reloj. Este contenedor servirá como el lugar donde nuestro reloj digital será desplegado.
<span class="line"><span style="color: #81A1C1"><!</span><span style="color: #D8DEE9">DOCTYPE</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">html</span><span style="color: #81A1C1">></span></span>
<span class="line"><span style="color: #81A1C1"><!--</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Especifica</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">que</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">este</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">documento</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sigue</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">el</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">estándar</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">HTML5</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">--></span></span>
<span class="line"><span style="color: #81A1C1"><html</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">lang</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">es</span><span style="color: #ECEFF4">"</span><span style="color: #81A1C1">></span></span>
<span class="line"><span style="color: #D8DEE9FF"><!-- Define el idioma del contenido de la página como español --></span></span>
<span class="line"><span style="color: #81A1C1"><head></span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1"><meta</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">charset</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">UTF-8</span><span style="color: #ECEFF4">"</span><span style="color: #81A1C1">></span></span>
<span class="line"><span style="color: #D8DEE9FF"> <!-- Establece la codificación de caracteres para el documento a UTF-8 --></span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1"><meta</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">name</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">viewport</span><span style="color: #ECEFF4">"</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">content</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">width=device-width, initial-scale=1.0</span><span style="color: #ECEFF4">"</span><span style="color: #81A1C1">></span></span>
<span class="line"><span style="color: #D8DEE9FF"> <!-- Asegura que la página sea responsiva y se vea bien en todos los dispositivos --></span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1"><title></span><span style="color: #D8DEE9FF">Reloj Digital</span><span style="color: #81A1C1"></title></span></span>
<span class="line"><span style="color: #D8DEE9FF"> <!-- Define el título de la página, que aparece en la pestaña del navegador --></span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1"><link</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">rel</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">stylesheet</span><span style="color: #ECEFF4">"</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">href</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">style.css</span><span style="color: #ECEFF4">"</span><span style="color: #81A1C1">></span></span>
<span class="line"><span style="color: #D8DEE9FF"> <!-- Vincula el documento de estilos CSS externo, donde se definen los estilos visuales de la página --></span></span>
<span class="line"><span style="color: #81A1C1"></head></span></span>
<span class="line"><span style="color: #81A1C1"><body></span></span>
<span class="line"><span style="color: #D8DEE9FF"> <!-- Contenido principal de la página --></span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1"><div</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">class</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">reloj</span><span style="color: #ECEFF4">"</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">id</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">reloj</span><span style="color: #ECEFF4">"</span><span style="color: #81A1C1">></div></span></span>
<span class="line"><span style="color: #D8DEE9FF"> <!-- Un elemento div que muestra el reloj digital. </span></span>
<span class="line"><span style="color: #D8DEE9FF"> Tiene una clase 'reloj' para aplicarle estilos específicos definidos en CSS,</span></span>
<span class="line"><span style="color: #D8DEE9FF"> y un ID 'reloj' para poder ser referenciado por el código JavaScript. --></span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1"><script</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">src</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">"</span><span style="color: #A3BE8C">script.js</span><span style="color: #ECEFF4">"</span><span style="color: #81A1C1">></script></span></span>
<span class="line"><span style="color: #D8DEE9FF"> <!-- Vincula el documento JavaScript externo que contiene la lógica para actualizar la hora mostrada en el reloj digital --></span></span>
<span class="line"><span style="color: #81A1C1"></body></span></span>
<span class="line"><span style="color: #81A1C1"></html></span></span>Estilizando con CSS
Para que nuestro reloj digital no solo funcione bien, sino que también luzca bien, utilizamos CSS. El objetivo es crear un diseño atractivo y legible. Usando Flexbox, podemos centrar nuestro reloj en la página, tanto vertical como horizontalmente. Además, establecemos un color de fondo, color de texto, tamaño de fuente y bordes para darle al reloj un aspecto moderno y minimalista.
<span class="line"><span style="color: #616E88">/* Estilos generales para el cuerpo de la página */</span></span>
<span class="line"><span style="color: #D8DEE9">body</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF"> display</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">flex</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">/* Usa Flexbox para el diseño, permitiendo centrar el contenido fácilmente */</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">justify</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">content</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">center</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">/* Centra el contenido horizontalmente */</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">align</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">items</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">center</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">/* Centra el contenido verticalmente */</span></span>
<span class="line"><span style="color: #D8DEE9FF"> height</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> 100</span><span style="color: #D8DEE9">vh</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">/* Ajusta la altura del cuerpo a todo el viewport */</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">background</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">color</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> #</span><span style="color: #B48EAD">333</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">/* Establece un color de fondo oscuro para el cuerpo de la página */</span></span>
<span class="line"><span style="color: #D8DEE9FF"> color</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> #</span><span style="color: #D8DEE9">fff</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">/* Establece el color del texto a blanco */</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">font</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">family</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">Arial</span><span style="color: #ECEFF4">'</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">sans</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">serif</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">/* Usa Arial como la fuente principal, con una alternativa sans-serif */</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">font</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">size</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> 60</span><span style="color: #D8DEE9">px</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">/* Ajusta el tamaño del texto a 60px para hacerlo grande y legible */</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">/* Estilos específicos para el elemento que tiene la clase 'reloj' */</span></span>
<span class="line"><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">reloj</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF"> padding</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> 20</span><span style="color: #D8DEE9">px</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">/* Añade un relleno alrededor del contenido para separarlo del borde */</span></span>
<span class="line"><span style="color: #D8DEE9FF"> border</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> 2</span><span style="color: #D8DEE9">px</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">solid</span><span style="color: #D8DEE9FF"> #</span><span style="color: #D8DEE9">fff</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">/* Establece un borde sólido blanco alrededor del elemento */</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">border</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9FF">radius</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> 20</span><span style="color: #D8DEE9">px</span><span style="color: #81A1C1">;</span><span style="color: #D8DEE9FF"> </span><span style="color: #616E88">/* Redondea las esquinas del borde para suavizar el diseño */</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>La Magia de Javascript
El núcleo funcional de nuestro reloj digital reside en Javascript. Aquí es donde se crea la lógica para obtener la hora actual y actualizar nuestro elemento HTML en tiempo real. Primero, definimos una función actualizarHora que se encarga de obtener la hora, minutos y segundos actuales. Luego, para asegurarnos de que estos números se muestren siempre con dos dígitos, implementamos una función auxiliar agregarCero. Finalmente, usamos setInterval para llamar a actualizarHora cada segundo, manteniendo así nuestro reloj siempre actualizado.
<span class="line"><span style="color: #616E88">// Define una función para actualizar la hora mostrada en la página web.</span></span>
<span class="line"><span style="color: #81A1C1">function</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">actualizarHora</span><span style="color: #ECEFF4">()</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #ECEFF4"> </span><span style="color: #616E88">// Obtiene el elemento HTML con el ID 'reloj'.</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">const</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">reloj</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">document</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">getElementById</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">reloj</span><span style="color: #ECEFF4">'</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #ECEFF4"> </span><span style="color: #616E88">// Crea un nuevo objeto Date que contiene la fecha y hora actual.</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">const</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ahora</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">new</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">Date</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #ECEFF4"> </span><span style="color: #616E88">// Obtiene las horas de la fecha actual y agrega un cero al principio si es necesario.</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">const</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">horas</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">agregarCero</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">ahora</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">getHours</span><span style="color: #D8DEE9FF">())</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #ECEFF4"> </span><span style="color: #616E88">// Obtiene los minutos de la fecha actual y agrega un cero al principio si es necesario.</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">const</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">minutos</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">agregarCero</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">ahora</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">getMinutes</span><span style="color: #D8DEE9FF">())</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #ECEFF4"> </span><span style="color: #616E88">// Obtiene los segundos de la fecha actual y agrega un cero al principio si es necesario.</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">const</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">segundos</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">agregarCero</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">ahora</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">getSeconds</span><span style="color: #D8DEE9FF">())</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span></span>
<span class="line"><span style="color: #ECEFF4"> </span><span style="color: #616E88">// Actualiza el contenido del elemento 'reloj' con la hora actual en formato HH:MM:SS.</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">reloj</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">textContent</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">`</span><span style="color: #81A1C1">${</span><span style="color: #D8DEE9">horas</span><span style="color: #81A1C1">}</span><span style="color: #A3BE8C">:</span><span style="color: #81A1C1">${</span><span style="color: #D8DEE9">minutos</span><span style="color: #81A1C1">}</span><span style="color: #A3BE8C">:</span><span style="color: #81A1C1">${</span><span style="color: #D8DEE9">segundos</span><span style="color: #81A1C1">}</span><span style="color: #ECEFF4">`</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// Define una función para agregar un cero al principio de los números menores a 10.</span></span>
<span class="line"><span style="color: #81A1C1">function</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">agregarCero</span><span style="color: #ECEFF4">(</span><span style="color: #D8DEE9">numero</span><span style="color: #ECEFF4">)</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #ECEFF4"> </span><span style="color: #616E88">// Si el número es menor que 10, devuelve el número con un '0' al principio.</span></span>
<span class="line"><span style="color: #ECEFF4"> </span><span style="color: #616E88">// De lo contrario, devuelve el número tal cual.</span></span>
<span class="line"><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">numero</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1"><</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">10</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">?</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">'</span><span style="color: #A3BE8C">0</span><span style="color: #ECEFF4">'</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">+</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">numero</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">numero</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// Establece un temporizador que llama a la función `actualizarHora` cada 1000 milisegundos (1 segundo),</span></span>
<span class="line"><span style="color: #616E88">// para actualizar la hora mostrada en la página web de manera continua.</span></span>
<span class="line"><span style="color: #88C0D0">setInterval</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">actualizarHora</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1000</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #616E88">// Llama a la función `actualizarHora` inmediatamente al cargar la página para mostrar la hora actual sin esperar el primer intervalo de 1 segundo.</span></span>
<span class="line"><span style="color: #88C0D0">actualizarHora</span><span style="color: #D8DEE9FF">()</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>Repositorio del Sistema
Demo del Reloj digital Javascript
https://configuroweb.github.io/reloj-digital-javascript/
Conclusiones
Crear un Reloj Digital en Javascript es un proyecto accesible que ofrece una introducción práctica a conceptos fundamentales de la programación web como el DOM, eventos y manipulación de tiempo. Además, proporciona una oportunidad para experimentar con diseños y estilos, haciendo de este un proyecto versátil tanto para novatos como para desarrolladores con experiencia buscando añadir un toque de interactividad y funcionalidad a sus sitios web.
Implementar un reloj digital no solo mejora tus habilidades de programación, sino que también te permite explorar aspectos creativos del diseño web. Esperamos que este tutorial te haya inspirado a integrar un reloj digital en tu próximo proyecto web y a personalizarlo para que se adapte perfectamente a tus necesidades y las de tus usuarios. ¡Feliz codificación!
Para desarrollos a medida me puedes contactar en el siguiente enlace de contacto