After 5days into ReactJs, I build a simple Digital clock.
font used: digital-7
Through this project I learned how to use useEffect() and also setInterval()
I did use four different useState() for hours , minutes , seconds and date.
const [hours,setHours]=useState("00"); const [minutes,setMinutes]=useState("00"); const [seconds,setSeconds]=useState("00"); const [date,setDate]=useState("date");
we can get the current Date in javascript by
new Date()
so I made let d=new Date()
and extracted the related content and set the all varibles.
useEffect( ()=>{ const intervalId= setInterval(()=>{ let d=new Date(); var h=d.getHours().toString(); var m=d.getMinutes().toString(); var s=d.getSeconds().toString(); var z=d.getDate().toString()+" / " +(d.getMonth()+1).toString()+" / " +d.getFullYear(); setDate(z); setHours(h); setMinutes(m); setSeconds(s); return () => clearInterval(intervalId); },1000); },[seconds,minutes,hours,date]);
I thought I had completed but the hours were in 24hrs format , so changed it to 12 hours by h=(h%12)||12;
and also padded zeros at the start using padstart(2,'0');
and returned some JSX , so now complete code in App.js looks like
import React ,{useState,useEffect}from 'react'; import './App.css' export default function App() { const [hours,setHours]=useState("00"); const [minutes,setMinutes]=useState("00"); const [seconds,setSeconds]=useState("00"); const [date,setDate]=useState("date"); useEffect( ()=>{ const intervalId= setInterval(()=>{ let d=new Date(); var h=d.getHours(); var m=d.getMinutes().toString(); var s=d.getSeconds().toString(); h=(h%12)||12; h=h.toString(); var z=d.getDate().toString().padStart(2,'0')+" / " +(d.getMonth()+1).toString().padStart(2,'0')+" / "+d.getFullYear(); setDate(z); setHours(h.padStart(2,'0')); setMinutes(m.padStart(2,'0')); setSeconds(s.padStart(2,'0')); return () => clearInterval(intervalId); },1000); },[seconds,minutes,hours,date]); return ( <div> <h1>Digital Clock</h1> <hr/> <h1 className="date">{date}</h1> <h1 className="glow">{hours} :{minutes} :{seconds}</h1> </div> ) }
now lets go to styling : App.css
imported digital font with black background , green digital clock and today's date
@font-face{ font-family:'digital-7'; src: local('digital-7'),url('./fonts/digital-7.ttf')format('truetype'); } body{ background-color: black; } h1 { font-family:'digital-7'; font-size: 80px; color: #32cd32; text-align: center; } .date{ letter-spacing: 4px; position: fixed; top: 80%; left: 50%; /* bring your own prefixes */ transform: translate(-50%, -50%); } .glow { letter-spacing: 4px; position: fixed; top: 50%; left: 50%; /* bring your own prefixes */ transform: translate(-50%, -50%); }
so the final output looks like the thumbnail of this post.
you can check my speed code in my Youtube Channel
Top comments (0)