<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Unable to create two clocks that looks alike]]></title><description><![CDATA[<p dir="auto">Hi,</p>
<p dir="auto">I’m using the MMM-iClock module to display clock. Initially this was working fine, but here as per my requirement, I am trying to display 2 clocks side by side in <strong>top_right</strong> section.  Here I’ve 2 questions.</p>
<ul>
<li>
<p dir="auto">Here the functionality is working fine, but the UI(of the 2nd clock) seems messed up(the number bars doesn’t show up).</p>
</li>
<li>
<p dir="auto">As soon as the mirror starts, the clocks goes to the right corner and then automatically comes to place.</p>
</li>
</ul>
<p dir="auto">Here is my code.</p>
<pre><code>var iClock;
Module.register("MMM-iClock", {
    defaults: {
        seconds: true,
        size: "350px",
        color: "#FFFFFF",
        digital: 2,				//	0 (no display), 1 (permanent display) or 2 (show for 5 seconds on every miniute)
        analogue: true,		//	false (no display), true (permanent display)
        glow: true,			//	false (no display), true (permanent display)

    },
    getStyles: function () {
        return ["MMM-iClock.css"];
    },

    days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
    months: ["January", "February", "March", "April", "May", "June", "July",
        "August", "September", "October", "November", "December"],

    start: function () {
        iClock = this;
        Log.info("Starting module: " + iClock.name);
        var style = document.querySelector('html');
        style.style.setProperty('--fore', iClock.config.color);
        style.style.setProperty('--size', iClock.config.size);
        if (!iClock.config.glow)
            style.style.setProperty('--glow', "none");
        setTimeout(iClock.updateClock, 1000)
    },

    getDom: function () {
        var wrapper = document.createElement("div");
        wrapper.className = "iClock";
        if (iClock.config.analogue === true) {
            var x = document.createElement("div");
            x.className = "x";
            var y = document.createElement("div");
            y.className = "y";
            var z = document.createElement("div");
            z.className = "z";

            overlay = document.createElement("div");
            overlay.className = "overlay";
            var hour = document.createElement("div");
            hour.className = "hour";
            hour.id = "sHour";
            overlay.appendChild(hour);
            var minute = document.createElement("div");
            minute.className = "minute";
            minute.id = "sMinute";
            overlay.appendChild(minute);
            if (iClock.config.seconds === true) {
                var second = document.createElement("div");
                second.className = "second";
                second.id = "sSecond";
                overlay.appendChild(second);
            }

            //SFO

            sfoTimeoverlay = document.createElement("div");
            sfoTimeoverlay.className = "sfoTimeoverlay";
            var sfoTimehour = document.createElement("div");
            sfoTimehour.className = "hour";
            sfoTimehour.id = "sfoTimesHour";
            sfoTimeoverlay.appendChild(sfoTimehour);
            var sfoTimeminute = document.createElement("div");
            sfoTimeminute.className = "minute";
            sfoTimeminute.id = "sfoTimesMinute";
            sfoTimeoverlay.appendChild(sfoTimeminute);
            if (iClock.config.seconds === true) {
                var sfoTimesecond = document.createElement("div");
                sfoTimesecond.className = "second";
                sfoTimesecond.id = "sfoTimesSecond";
                sfoTimeoverlay.appendChild(sfoTimesecond);
            }





            z.appendChild(overlay);
            z.appendChild(sfoTimeoverlay);
            y.appendChild(z);
            x.appendChild(y);
            wrapper.append(x);
        }
        if (iClock.config.digital !== 0) {
            var time = document.createElement("div");
            time.className = "time";
            time.id = "sTime";
            if (iClock.config.digital === 2)
                time.style.opacity = 0;
            if (iClock.config.analogue === true)
                overlay.appendChild(time);
            else wrapper.appendChild(time);
        }
        if (iClock.config.digital !== 0) {
            console.log('##########' + iClock.config.digital);
            var sfoTimetime = document.createElement("div");
            sfoTimetime.className = "time";
            sfoTimetime.id = "sfoTimesTime";
            if (iClock.config.digital === 2)
                sfoTimetime.style.opacity = 0;
            if (iClock.config.analogue === true)
                sfoTimeoverlay.appendChild(sfoTimetime);
            else
                wrapper.appendChild(sfoTimetime);
        }
        return wrapper;
    },
    updateClock: function () {
        var wait = 60;
        now = new Date();
        console.log(now);

        wait -= now.getSeconds();
        var sec = now.getSeconds() + (60 * now.getMinutes()) + (60 * 60 * now.getHours());
        if (iClock.config.seconds === true) {
            wait = 1;
            sec += 1
        }
        s = (360 / 60) * sec;
        m = s / 60;
        h = m / 12
        sHour = hour = now.getHours();
        sMinute = minute = now.getMinutes();
        if (sHour &lt; 10) sHour = "0" + sHour;
        if (sMinute &lt; 10) sMinute = "0" + sMinute;
        var sDate = document.createElement("div");
        sDate.className = "date";
        sDate.innerHTML = iClock.days[now.getDay()] + " " + now.getDate() + " " + iClock.months[now.getMonth()];
        document.getElementById('sTime').innerHTML = sHour + ":" + sMinute;
        document.getElementById('sTime').appendChild(sDate);
        if (iClock.config.digital == 2) {
            if ((iClock.config.seconds === true &amp;&amp; (sec + 2) % 60 == 0) || iClock.config.seconds === false)
                document.getElementById('sTime').style.opacity = 1;
            setTimeout(function () {
                document.getElementById('sTime').style.opacity = 0;
            }, 5000);
        }
        if (iClock.config.analogue === true) {
            if (iClock.config.seconds === true)
                document.getElementById('sSecond').style.transform = "translate(-50%, -50%) rotate(" + s + "deg)";
            document.getElementById('sMinute').style.transform = "translate(-50%, -50%) rotate(" + m + "deg)";
            document.getElementById('sHour').style.transform = "translate(-50%, -50%) rotate(" + h + "deg)";
        }


        var estTime = new Date();
        estTime.setHours(now.getHours() - 12);
        estTime.setMinutes(now.getMinutes() - 30);
        console.log(estTime);

        sfoTime = estTime;
        wait = 60;


        wait -= sfoTime.getSeconds();
        var sfoTimesec = sfoTime.getSeconds() + (60 * sfoTime.getMinutes()) + (60 * 60 * sfoTime.getHours());
        if (iClock.config.seconds === true) {
            wait = 1;
            sfoTimesec += 1
        }
        sfoTimes = (360 / 60) * sfoTimesec;
        sfoTimem = sfoTimes / 60;
        sfoTimeh = sfoTimem / 12
        sfoTimesHour = sfoTimehour = sfoTime.getHours();
        sfoTimesMinute = sfoTimeminute = sfoTime.getMinutes();
        if (sfoTimesHour &lt; 10) sfoTimesHour = "0" + sfoTimesHour;
        if (sfoTimesMinute &lt; 10) sfoTimesMinute = "0" + sfoTimesMinute;
        var sfoTimesDate = document.createElement("div");
        sfoTimesDate.className = "date";
        sfoTimesDate.innerHTML = iClock.days[sfoTime.getDay()] + " " + sfoTime.getDate() + " " + iClock.months[sfoTime.getMonth()];
        console.log(document.getElementById('sfoTimesTime'));
        document.getElementById('sfoTimesTime').innerHTML = sfoTimesHour + ":" + sfoTimesMinute;
        document.getElementById('sfoTimesTime').appendChild(sfoTimesDate);
        if (iClock.config.digital == 2) {
            if ((iClock.config.seconds === true &amp;&amp; (sfoTimesec + 2) % 60 == 0) || iClock.config.seconds === false)
                document.getElementById('sfoTimesTime').style.opacity = 1;
            setTimeout(function () {
                document.getElementById('sfoTimesTime').style.opacity = 0;
            }, 5000);
        }
        if (iClock.config.analogue === true) {
            if (iClock.config.seconds === true)
                document.getElementById('sfoTimesSecond').style.transform = "translate(-50%, -50%) rotate(" + sfoTimes + "deg)";
            document.getElementById('sfoTimesMinute').style.transform = "translate(-50%, -50%) rotate(" + sfoTimem + "deg)";
            document.getElementById('sfoTimesHour').style.transform = "translate(-50%, -50%) rotate(" + sfoTimeh + "deg)";
        }
        setTimeout(iClock.updateClock, wait * 1000);
    }
});
</code></pre>
<p dir="auto">and here is the CSS.</p>
<pre><code>:root {
    --back: #000;
    --fore: #00D6FF;
    --size: 350px;
    --glow: 0 0 8px var(--fore);
}

.iClock {
    position: relative;
    display: block;
    width: var(--size);
    height: var(--size);
    border-radius: 350px;
}

.iClock .x:after, .iClock .x:before, .iClock .x .y:after, .iClock .x .y:before, .iClock .x .y .z:after, .iClock .x .y .z:before {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 2px;
    height: 100%;
    background: var(--fore);
}

.iClock:after {
    transform: translate(-50%, -50%) rotate(90deg);
    z-index: 1;
}

.iClock .x:before {
    transform: translate(-50%, -50%) rotate(30deg);
}

.iClock .x:after {
    transform: translate(-50%, -50%) rotate(60deg);
}

.iClock .x .y:before {
    transform: translate(-50%, -50%) rotate(120deg);
}

.iClock .x .y:after {
    transform: translate(-50%, -50%) rotate(150deg);
}

.iClock .x .y .z:before {
    transform: translate(-50%, -50%) rotate(0deg);
}

.iClock .x .y .z:after {
    transform: translate(-50%, -50%) rotate(90deg);
}

.overlay {
    float: left;
}

.sfoTimeoverlay {
    float: right;
    margin-left: 120%
}

.iClock .x .y .overlay, .iClock .x .y .sfoTimeoverlay {
    position: absolute;
    width: 91%;
    height: 91%;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background: var(--back);
    border-radius: 300px;
    z-index: 2;
}

.iClock .x .y .overlay .hour, .iClock .x .y .overlay .minute, .iClock .x .y .overlay .second, 
.iClock .x .y .sfoTimeoverlay .hour, .iClock .x .y .sfoTimeoverlay .minute, .iClock .x .y .sfoTimeoverlay .second {
    position: absolute;
    top: 50%;
    left: 50%;
    width: calc(100% + 40px);
    height: calc(100% + 40px);
    border-radius: 350px;
    transform: translate(-50%, -50%);
    border: 2px solid var(--fore);
    box-shadow: var(--glow);
}

.iClock .x .y .overlay .hour:after, .iClock .x .y .overlay .minute:after, .iClock .x .y .overlay .second:after, .iClock .x .y .sfoTimeoverlay .hour:after, .iClock .x .y .sfoTimeoverlay .minute:after, .iClock .x .y .sfoTimeoverlay .second:after {
    content: "";
    position: absolute;
    width: 10px;
    height: 15px;
    top: -8px;
    left: 50%;
    transform: translate(-50%);
    background: var(--back);
}

.iClock .x .y .overlay .minute, .iClock .x .y .sfoTimeoverlay .minute {
    width: calc(100% - 18px);
    height: calc(100% - 18px);
}

.iClock .x .y .overlay .second, .iClock .x .y .sfoTimeoverlay .second {
    width: calc(100% - 50px);
    height: calc(100% - 50px);
}

.iClock .time {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    text-align: center;
    font-family: 'Titillium Web', sans-serif;
    text-align: center;
    font-size: 15px;
    white-space: nowrap;
    font-weight: 500;
    line-height: 30px;
    text-shadow: var(--glow);
    color: var(--fore);
}

.iClock .x .y .overlay .hour, .iClock .x .y .overlay .minute, .iClock .x .y .overlay .second, .iClock .time, .iClock .x .y .sfoTimeoverlay .hour, .iClock .x .y .sfoTimeoverlay .minute, .iClock .x .y .sfoTimeoverlay .second, .iClock .time {
    transition: 1s cubic-bezier(.4, 0, .2, 1);
    -o-transition: 1s cubic-bezier(.4, 0, .2, 1);
    -ms-transition: 1s cubic-bezier(.4, 0, .2, 1);
    -moz-transition: 1s cubic-bezier(.4, 0, .2, 1);
    -webkit-transition: 1s cubic-bezier(.4, 0, .2, 1);
}

.iClock .time .date {
    font-size: 10px;
    line-height: 25px;
    text-align: center;
}
</code></pre>
<p dir="auto">I didn’t do much of coding here, I copy pasted the existing clock and did modifications on top of it.</p>
<p dir="auto">Here is how it looks while I start my mirror.<br />
<img src="/assets/uploads/files/1558974210801-screen-shot-2019-05-27-at-9.52.37-pm.png" alt="0_1558974204182_Screen Shot 2019-05-27 at 9.52.37 PM.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">And here it is after 2-3 seconds.</p>
<p dir="auto"><img src="/assets/uploads/files/1558974237730-screen-shot-2019-05-27-at-9.52.43-pm.png" alt="0_1558974231410_Screen Shot 2019-05-27 at 9.52.43 PM.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">please let me know on where am I going wrong and how can I fix this.</p>
<p dir="auto">Thanks,<br />
Sunny</p>
]]></description><link>https://forum.magicmirror.builders/topic/10524/unable-to-create-two-clocks-that-looks-alike</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 02:20:40 GMT</lastBuildDate><atom:link href="https://forum.magicmirror.builders/topic/10524.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 May 2019 16:24:58 GMT</pubDate><ttl>60</ttl></channel></rss>