DEV Community

Cover image for Real-time JavaScript Clock
Arc Coder | Harsh Patel
Arc Coder | Harsh Patel

Posted on

Real-time JavaScript Clock

Please checkout my YouTube Channel

Today we are going to learn how to make a real-time clock by using vanilla JavaScript and CSS only.


Final Output

Final Output


CodePen


HTML Code

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <link rel="stylesheet" href="index.css" />
        <title>Clock UI Design</title>
    </head>
    <body>
        <div id="clock">
            <h2>Time is</h2>
            <div id="time">
                <div>
                    <span id="hours">00</span>
                    <span>Hours</span>
                </div>
                <div>
                    <span id="minutes">00</span>
                    <span>Minutes</span>
                </div>
                <div>
                    <span id="seconds">00</span>
                    <span>Seconds</span>
                </div>
                <div>
                    <span id="phase">AM</span>
                </div>
            </div>
        </div>
        <script src="./index.js"></script>
    </body>
</html>
Enter fullscreen mode Exit fullscreen mode

CSS Code

@import url("https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600&display=swap");

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: "Poppins", sans-serif;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

body {
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    background: #060a1f;
}

#clock h2 {
    position: relative;
    display: block;
    color: #fff;
    text-align: center;
    margin: 10px 0;
    font-weight: 700;
    text-transform: 0.4em;
    font-size: 2em;
}

#clock #time {
    display: flex;
}

#clock #time div {
    position: relative;
    margin: 0 5px;
    -webkit-box-reflect: below 1px linear-gradient(transparent, #0004);
}

#clock #time div span {
    position: relative;
    display: block;
    width: 100px;
    height: 80px;
    background: #2196f3;
    color: #fff;
    font-weight: 300;
    display: flex;
    justify-content: center;
    align-items: center;
    font-size: 3em;
    z-index: 10;
    box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2);
}

#clock #time div span:nth-child(2) {
    height: 30px;
    font-size: 0.7em;
    letter-spacing: 0.2em;
    font-weight: 500;
    z-index: 9;
    box-shadow: none;
    background: #127fd6;
    text-transform: uppercase;
}

#clock #time div:nth-last-child(2) span {
    background: #ff006a;
}

#clock #time div:nth-last-child(2) span:nth-child(2) {
    background: #ec0062;
}

#clock #time div:nth-last-child(1) span {
    position: absolute;
    bottom: 0;
    width: 60px;
    height: 40px;
    font-size: 1.5em;
    background: #fff;
    color: #000;
    -webkit-box-reflect: below 1px linear-gradient(transparent, #0004);
}
Enter fullscreen mode Exit fullscreen mode

JS Code

function clock() {
    var hours = document.getElementById("hours");
    var minutes = document.getElementById("minutes");
    var seconds = document.getElementById("seconds");
    var phase = document.getElementById("phase");

    var h = new Date().getHours();
    var m = new Date().getMinutes();
    var s = new Date().getSeconds();
    var am = "AM";

    if (h > 12) {
        h = h - 12;
        var am = "PM";
    }

    h = h < 10 ? "0" + h : h;
    m = m < 10 ? "0" + m : m;
    s = s < 10 ? "0" + s : s;

    hours.innerHTML = h;
    minutes.innerHTML = m;
    seconds.innerHTML = s;
    phase.innerHTML = am;
}

var interval = setInterval(clock, 1000);

Enter fullscreen mode Exit fullscreen mode

Discussion (0)