# Adjusting for timezone to display the time on an analogue clock

**URL:** <https://discourse.nodered.org/t/adjusting-for-timezone-to-display-the-time-on-an-analogue-clock/51780>\
**Category:** Dashboard\
**Created:** [2 October 2021 14:41 UTC](https://discourse.nodered.org/t/adjusting-for-timezone-to-display-the-time-on-an-analogue-clock/51780 "2021-10-02T14:41:31Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![jbudd](https://avatars.discourse-cdn.com/v4/letter/j/5f8ce5/32.png) [@jbudd](https://discourse.nodered.org/u/jbudd)\
**Post date:** [2 October 2021 14:41 UTC](https://discourse.nodered.org/t/adjusting-for-timezone-to-display-the-time-on-an-analogue-clock/51780/1 "2021-10-02T14:41:31Z")

</div>

Edit - "function node" and "template node" swapped over.

If I use a function node I can adjust the UTC timestamp from new Date() to account for BST

```auto
let d = new Date(); // eg 2021-10-02T14:11:35.000Z
let ts = d.getTime(); // current timestamp in UTC
let offset = (d.getTimezoneOffset() * 60000); // BST getTimezoneOffset returns -60 minutes
let adjustedts = (ts - offset); // Adjust the timestamp
let adjusteddate = new Date(adjustedts); // eg 2021-10-02T15:11:35.000Z
msg.payload = adjusteddate;
return msg;

```

But when I transfer that code to a script in a template node it doesn't work, the offset always seems to be 0

```auto
<script>
(function(scope) {
  scope.$watch('msg', function(msg) {
    if (msg) {
        let d = new Date(); // eg 2021-10-02T14:11:35.000Z
        console.log("UTC hour ", d.getHours());
        let ts = d.getTime(); // current timestamp in UTC
        let offset = (d.getTimezoneOffset() * 60000); // BST getTimezoneOffset returns -60 minutes
        console.log("offset", offset);
        let adjustedts = (ts - offset); // Adjust the timestamp
        let adjusteddate = new Date(adjustedts); // eg 2021-10-02T15:11:35.000Z

        let sec = adjusteddate.getSeconds();
        let mins = adjusteddate.getMinutes();
        let hour = adjusteddate.getHours();
        console.log("hour ", hour);
        
        let secDeg = ''+(((sec / 60) * 360) + 90)+'deg'; 
        let minsDeg = ''+(((mins / 60) * 360) + ((sec/60)*6) + 90)+'deg';         
        let hourDeg = ''+(((hour / 12) * 360) + ((mins/60)*30) + 90)+'deg';
        
        document.getElementById('gauge_'+scope.$id).style.setProperty('--time-hour', hourDeg);
        document.getElementById('gauge_'+scope.$id).style.setProperty('--time-minute', minsDeg);
        document.getElementById('gauge_'+scope.$id).style.setProperty('--time-second', secDeg);
    }
   
  });
})(scope);
</script>

```

The three console.log() statements give  
 ![Untitled 1](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/e/2/e2dc2416555bcc19f551a58e9b7a4a2da395a665.jpeg)

I'm guessing this is something to do with scope (which I don't understand in javascript)?  
Can anyone point me in the right direction?

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [2 October 2021 15:03 UTC](https://discourse.nodered.org/t/adjusting-for-timezone-to-display-the-time-on-an-analogue-clock/51780/2 "2021-10-02T15:03:34Z")

</div>

Is node-red and the client browser on the same machine and do they have the same timezone setting?

---

<div class="post-metadata">

**Author:** ![jbudd](https://avatars.discourse-cdn.com/v4/letter/j/5f8ce5/32.png) [@jbudd](https://discourse.nodered.org/u/jbudd)\
**Post date:** [2 October 2021 15:20 UTC](https://discourse.nodered.org/t/adjusting-for-timezone-to-display-the-time-on-an-analogue-clock/51780/3 "2021-10-02T15:20:41Z")

</div>

Node-red is on a Raspberry Pi - **date** shows Sat 2 Oct 16:16:06 BST 2021  
The browser is on WIndows 10 and the time shows as 16:16:20 Sat 2 October 2021 (it automatically adjusts the clock GMT/BST)

Ah. The function code runs on the Pi, the template on the PC, presumably.  
Does getTimezoneOffset() work in a browser on a PC?

---

<div class="post-metadata">

**Author:** ![Steve-Mcl](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/steve-mcl/32/4826_2.png) [@Steve-Mcl](https://discourse.nodered.org/u/Steve-Mcl)\
**Post date:** [2 October 2021 15:30 UTC](https://discourse.nodered.org/t/adjusting-for-timezone-to-display-the-time-on-an-analogue-clock/51780/4 "2021-10-02T15:30:39Z")

</div>

> [@jbudd](#):
>
> Does getTimezoneOffset() work in a browser on a PC

Yes.

> **[Date.prototype.getTimezoneOffset() - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset#browser_compatibility)**
>
> The getTimezoneOffset() method of Date instances returns the difference, in minutes, between this date as evaluated in the UTC time zone, and the same date as evaluated in the local time zone.

On PI, What does `cat /etc/timezone` show?

On windows, what timezone is set?

---

<div class="post-metadata">

**Author:** ![jbudd](https://avatars.discourse-cdn.com/v4/letter/j/5f8ce5/32.png) [@jbudd](https://discourse.nodered.org/u/jbudd)\
**Post date:** [2 October 2021 15:36 UTC](https://discourse.nodered.org/t/adjusting-for-timezone-to-display-the-time-on-an-analogue-clock/51780/5 "2021-10-02T15:36:32Z")

</div>

pi $ cat /etc/timezone  
Europe/London

PC  
 ![Untitled 2](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/6/d/6d7d08ec182646438e52bf0e4d1411aed793451e.jpeg)

---

<div class="post-metadata">

**Author:** ![jbudd](https://avatars.discourse-cdn.com/v4/letter/j/5f8ce5/32.png) [@jbudd](https://discourse.nodered.org/u/jbudd)\
**Post date:** [2 October 2021 19:16 UTC](https://discourse.nodered.org/t/adjusting-for-timezone-to-display-the-time-on-an-analogue-clock/51780/6 "2021-10-02T19:16:19Z")

</div>

Hmm my browser clearly doesn't think summer time applies here.  
My PC knows it's 20:15 but my browser says d.getHours() and d.getUTCHours() are both 19.

Nailed it!  
about:config privacy.resistFingerprinting was set to true.  
Set it back to default, restarted Firefox (cleared the cache) and it's working now.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/1X/d073cd938eafa2e558d7c2cd59003b3ef4963033.png) [@system](https://discourse.nodered.org/u/system)\
**Post date:** [16 October 2021 19:16 UTC](https://discourse.nodered.org/t/adjusting-for-timezone-to-display-the-time-on-an-analogue-clock/51780/7 "2021-10-16T19:16:58Z")

</div>

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.
