Sirhc
8 January 2024 04:26
1
Hello

I am trying to calculate the days between two dates.

I have the following:

let date1 = new Date();

Then 2 days later, I set this:

let date2 = new Date();

I have tried:

let number_of_days = date2 - date1;

but I get this error: "The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type."

Subtracting `date1`

from `date2`

will return the number of milliseconds between the 2 dates:

```
> var d1 = new Date()
2024-01-08T05:19:13.228Z
> var d2 = new Date()
2024-01-08T05:19:25.253Z
> d2 - d1
12025
```

When you say "...two days later..." I would suspect that the original `date1`

variable no longer exists as a Date object.

Sirhc
8 January 2024 05:46
3

shrickus:

```
d2 - d1
12025
```

It seems to work, but why does it underline the date in red in the function and give me this:

The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type

Ah, so the editor is giving that warning -- but the value is still calculated correctly?

In that case, you can get the value of each date in millis and then subtract those:
`date2.valueOf() - date1.valueOf()`

or use the unary `+`

operator to coerce those dates to integers, like this:
`+date2 - +date1`

(although the editor's syntax checker may not like that either)

Sirhc
8 January 2024 06:10
5
Editor didn't like the first solution, but the second one worked! Thanks!

i use this in a function node

```
msg.payload = dateToHowManyAgo(msg.payload)
return msg;
function dateToHowManyAgo(stringDate) {
var currDate = new Date();
var diffMs = currDate.getTime() - new Date(stringDate).getTime();
var sec = diffMs / 1000;
if (sec < 60)
return parseInt(sec) + ' second' + (parseInt(sec) > 1 ? 's' : '') + ' ago';
var min = sec / 60;
if (min < 60)
return parseInt(min) + ' minute' + (parseInt(min) > 1 ? 's' : '') + ' ago';
var h = min / 60;
if (h < 24)
return parseInt(h) + ' hour' + (parseInt(h) > 1 ? 's' : '') + ' ago';
var d = h / 24;
if (d < 30)
return parseInt(d) + ' day' + (parseInt(d) > 1 ? 's' : '') + ' ago';
var m = d / 30;
if (m < 12)
return parseInt(m) + ' month' + (parseInt(m) > 1 ? 's' : '') + ' ago';
var y = m / 12;
return parseInt(y) + ' year' + (parseInt(y) > 1 ? 's' : '') + ' ago';
}
```

system
Closed
8 March 2024 09:09
7
This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.