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 :)