Get time difference between two dates in seconds

date, javascript

Solution

The Code

var startDate = new Date();
// Do your operations
var endDate   = new Date();
var seconds = (endDate.getTime() - startDate.getTime()) / 1000;

Or even simpler `(endDate - startDate) / 1000` as pointed out in the comments unless you're using typescript.

The explanation

You need to call the `getTime()` method for the `Date` objects, and then simply subtract them and divide by 1000 (since it's originally in milliseconds). As an extra, when you're calling the `getDate()` method, you're in fact getting the day of the month as an integer between 1 and 31 (not zero based) as opposed to the epoch time you'd get from calling the `getTime()` method, representing the number of milliseconds since January 1st 1970, 00:00

Rant

Depending on what your date related operations are, you might want to invest in integrating a library such as day.js or Luxon which make things so much easier for the developer, but that's just a matter of personal preference.

For example in Luxon we would do `t1.diff(t2, "seconds")` which is beautiful.

Useful docs for this answer

- Why 1970?

- Date object

- Date's getTime method

- Date's getDate method

- Need more accuracy than just seconds?

Problem

I'm trying to get a difference between two dates in seconds. The logic would be like this : - set an initial date which would be now; - set a final date which would be the initial date plus some amount of seconds in future ( let's say 15 for instance ) - get the difference between those two ( the amount of seconds ) The reason why I'm doing it it with dates it's because the final date / time depends on some other variables and it's never the same ( it depends on how fast a user does something ) and I also store the initial date for other things. I've been trying something like this : ``` var _initial = new Date(), _initial = _initial.setDate(_initial.getDate()), _final = new Date(_initial); _final = _final.setDate(_final.getDate() + 15 / 1000 * 60); var dif = Math.round((_final - _initial) / (1000 * 60)); ``` The thing is that I never get the right difference. I tried dividing by `24 * 60` which would leave me with the seconds, but I never get it right. So what is it wrong with my logic ? I might be making some stupid mistake as it's quite late, but it bothers me that I cannot get it to work :)

Original source

Related problems