在几秒钟内获得两个date之间的时间差

我试图在几秒钟内得到两个date之间的差异。 逻辑会是这样的:

  • 设定一个现在的初始date;
  • 设置一个最后的date,这将是最初的date再加上一些秒数(比如说15)
  • 得到这两者之间的差异(秒数)

之所以我这样做,是因为最后的date/时间取决于其他variables,而且从来不相同(这取决于用户做了些什么),而且还存储了其他事物的初始date。

我一直在尝试这样的事情:

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

事情是,我从来没有得到正确的区别。 我试图用24 * 60除以秒数,但我从来没有把握。 那么我的逻辑有什么问题呢? 我可能会犯一些愚蠢的错误,因为时间已经太晚了,但是让我感到困扰的是我无法完成这项工作:)

代码

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

甚至更简单(endDate - startDate) / 1000在注释中指出,除非你使用打字稿。


解释

您需要调用Date对象的getTime()方法,然后简单地将它们相减并除以1000(因为它最初是以毫秒为单位)。 另外,当你调用getDate()方法时,事实上你得到的是一个1到31之间的整数(不是从0开始),而不是你从调用中获得的历元时间getTime()方法,表示自19701月1日00:00以来的毫秒数


胡言乱语

根据您的date相关的操作,您可能需要投资整合诸如date.js或者moment.js之类的库,这对开发人员来说更容易 ,但这只是个人偏好的问题。

例如在moment.js中,我们将会做一个moment1.diff(moment2, "seconds")


这个答案有用的文档

  • 为什么是1970?
  • date对象
  • date的getTime方法
  • Date的getDate方法
  • 需要更多的精度,而不仅仅是几秒
 <script type="text/javascript"> var _initial = '2015-05-21T10:17:28.593Z'; var fromTime = new Date(_initial); var toTime = new Date(); var differenceTravel = toTime.getTime() - fromTime.getTime(); var seconds = Math.floor((differenceTravel) / (1000)); document.write('+ seconds +'); </script> 

您可以使用new Date().getTime()获取时间戳。 然后你可以计算结束和开始之间的差异,并最终将ms的时间戳转换为s

 const start = new Date().getTime(); const end = new Date().getTime(); const diff = end - start; const seconds = Math.floor(diff / 1000 % 60); 

尝试使用高级编程语言的专用函数。 JavaScript .getSeconds(); 适合这里:

 var specifiedTime = new Date("November 02, 2017 06:00:00"); var specifiedTimeSeconds = specifiedTime.getSeconds(); var currentTime = new Date(); var currentTimeSeconds = currentTime.getSeconds(); alert(specifiedTimeSeconds-currentTimeSeconds);