# Date problem with now === stopTime

**URL:** <https://discourse.nodered.org/t/date-problem-with-now-stoptime/91064>\
**Category:** General\
**Created:** [18 September 2024 09:11 UTC](https://discourse.nodered.org/t/date-problem-with-now-stoptime/91064 "2024-09-18T09:11:33Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![Frida](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/frida/32/68250_2.png) [@Frida](https://discourse.nodered.org/u/Frida)\
**Post date:** [18 September 2024 09:11 UTC](https://discourse.nodered.org/t/date-problem-with-now-stoptime/91064/1 "2024-09-18T09:11:33Z")

</div>

Why now.getTime === stopTime.getTime() works,  
but not now === stopTime?

 ![pic0](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/3X/9/4/940c3a135abfc3c67a1f8e1127ce4410a1829ef9.png)

```auto
[{"id":"9d15a9187c914833","type":"tab","label":"Flow 12","disabled":false,"info":"","env":[]},{"id":"c43a8169fed4b72e","type":"junction","z":"9d15a9187c914833","x":300,"y":180,"wires":[["29eb42608a865bce"]]},{"id":"29eb42608a865bce","type":"function","z":"9d15a9187c914833","name":"function 60 ","func":"const now = new Date();\nnow.setSeconds(0)\nnow.setMilliseconds(0)\n\n// Set start a copple of minutes ahead before deploy\nlet start = 55\nlet stop = start + 2\n\nconst startTime = new Date(now)\nconst stopTime = new Date(now)\nstartTime.setMinutes(start)\nstopTime.setMinutes(stop)\n\nnode.warn(now.getTime())\n\nif (now >= startTime && now <= stopTime) {\n\n if (now < stopTime) {\n node.warn('now < stoptime');\n }\n \n node.warn('0 ' + now)\n node.warn('1 ' + startTime)\n node.warn('2 ' + stopTime)\n\n //Why does this not work?\n if(now === stopTime) {\n node.warn('now === stopTime')\n }\n\n // But this does\n if (now.getTime() === stopTime.getTime()) {\n node.warn('now.getTime() === stopTime.genTime')\n }\n}\n\n\n\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":430,"y":180,"wires":[["51a892843386397a"]]},{"id":"51a892843386397a","type":"debug","z":"9d15a9187c914833","name":"debug 2593","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":650,"y":179,"wires":[]},{"id":"394dedca39d49512","type":"inject","z":"9d15a9187c914833","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":170,"y":179,"wires":[["c43a8169fed4b72e"]]}]

```

```auto
const now = new Date();
now.setSeconds(0)
now.setMilliseconds(0)

// Set start a copple of minutes ahead before deploy
let start = 55
let stop = start + 2

const startTime = new Date(now)
const stopTime = new Date(now)
startTime.setMinutes(start)
stopTime.setMinutes(stop)

node.warn(now.getTime())

if (now >= startTime && now <= stopTime) {

    if (now < stopTime) {
        node.warn('now < stoptime');
    }
    
    node.warn('0 ' + now)
    node.warn('1 ' + startTime)
    node.warn('2 ' + stopTime)

    //Why does this not work?
    if(now === stopTime) {
        node.warn('now === stopTime')
    }

    // But this does
    if (now.getTime() === stopTime.getTime()) {
        node.warn('now.getTime() === stopTime.genTime')
    }
}

```

---

<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:** [18 September 2024 09:27 UTC](https://discourse.nodered.org/t/date-problem-with-now-stoptime/91064/2 "2024-09-18T09:27:02Z")

</div>

because `now` is a date object. Objects are references to a "thing" in memory. Since you have 2 "things" in memory, they have different pointers to a space in memory and they will NEVER equal 🙂

To compare date objects use `date1.valueOf() === date2.valueOf()`

> **[Date.prototype.valueOf() - JavaScript | MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/valueOf)**
>
> The valueOf() method of Date instances returns the number of milliseconds for this date since the epoch, which is defined as the midnight at the beginning of January 1, 1970, UTC.

---

<div class="post-metadata">

**Author:** ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)\
**Post date:** [18 September 2024 09:30 UTC](https://discourse.nodered.org/t/date-problem-with-now-stoptime/91064/3 "2024-09-18T09:30:36Z")

</div>

`now.getTime()` and `stopTime.getTime()` are integer values, which can be compared using `===`.

`now` and `stopTime` are Date objects. If you use to `===` to compare objects you are asking if they are the same object, which they are not. They contain the same time value but are not the same object in memory. I don't know whether it would work if you used `==`, but personally I would use `getTime()` in order to make it clear what you are doing.

---

<div class="post-metadata">

**Author:** ![Frida](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/frida/32/68250_2.png) [@Frida](https://discourse.nodered.org/u/Frida)\
**Post date:** [18 September 2024 16:27 UTC](https://discourse.nodered.org/t/date-problem-with-now-stoptime/91064/4 "2024-09-18T16:27:32Z")

</div>

Funnily enough, \<, \<= and \>= work, so that's why I thought == or === worked too.  
Whether I use now or aaaa makes no difference.

---

<div class="post-metadata">

**Author:** ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)\
**Post date:** [18 September 2024 18:35 UTC](https://discourse.nodered.org/t/date-problem-with-now-stoptime/91064/5 "2024-09-18T18:35:24Z")

</div>

Have you tried `==`?

---

<div class="post-metadata">

**Author:** ![Frida](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/frida/32/68250_2.png) [@Frida](https://discourse.nodered.org/u/Frida)\
**Post date:** [18 September 2024 18:59 UTC](https://discourse.nodered.org/t/date-problem-with-now-stoptime/91064/6 "2024-09-18T18:59:41Z")

</div>

Yes, I seem to have tried everything, but who knows.  
I'm on mac m1 with latest update, and  
18 Sep 20:57:21 - [info] Node-RED version: v4.0.3  
Sep 18 20:57:21 - [info] Node.js version: v21.7.1  
Sep 18 20:57:21 - [info] Darwin 24.0.0 arm64 LE  
When I get home I'll try an rpi.

---

<div class="post-metadata">

**Author:** ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)\
**Post date:** [18 September 2024 20:40 UTC](https://discourse.nodered.org/t/date-problem-with-now-stoptime/91064/7 "2024-09-18T20:40:34Z")

</div>

Having done some testing I see you are right. With two Date objects, `<` and `>` appear to work as expected but `==` always fails. I cannot explain that.

---

<div class="post-metadata">

**Author:** ![dceejay](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dceejay/32/38_2.png) [@dceejay](https://discourse.nodered.org/u/dceejay)\
**Post date:** [18 September 2024 20:49 UTC](https://discourse.nodered.org/t/date-problem-with-now-stoptime/91064/8 "2024-09-18T20:49:43Z")

</div>

Does \> and \< force them to be numeric for comparison purposes ?

---

<div class="post-metadata">

**Author:** ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)\
**Post date:** [18 September 2024 20:51 UTC](https://discourse.nodered.org/t/date-problem-with-now-stoptime/91064/9 "2024-09-18T20:51:28Z")

</div>

> [@dceejay](#):
>
> Does \> and \< force them to be numeric for comparison purposes

It would appear so, but then, probably naively, I had assumed that `==` would do the same.

---

<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:** [18 September 2024 21:01 UTC](https://discourse.nodered.org/t/date-problem-with-now-stoptime/91064/10 "2024-09-18T21:01:57Z")

</div>

using the \< and \> causes the default `valueOf` to be called. Easy enough to prove if you override the prototype to console log something.

---

<div class="post-metadata">

**Author:** ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)\
**Post date:** [18 September 2024 21:09 UTC](https://discourse.nodered.org/t/date-problem-with-now-stoptime/91064/11 "2024-09-18T21:09:29Z")

</div>

> [@Steve-Mcl](#):
>
> using the \< and \> causes the default `valueOf` to be called.

I wonder what is the logic of == not doing that.

> [@Steve-Mcl](#):
>
> Easy enough to prove if you override the prototype to console log something.

Not so easy for those of us who don't know how to do that, and without the experience to even think of it. We learn every day, fortunately. Though remembering is a different matter 🙂

---

<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:** [17 December 2024 21:10 UTC](https://discourse.nodered.org/t/date-problem-with-now-stoptime/91064/12 "2024-12-17T21:10:06Z")

</div>

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