以秒为单位获取两个日期之间的时差

Rol*_*and 127 javascript date

我试图在几秒钟内得到两个日期之间的差异.逻辑是这样的:

  • 设定一个现在的初始日期;
  • 设置一个最终日期,这个日期将是初始日期加上未来的一些秒数(例如,假设为15)
  • 得到这两者之间的差异(秒数)

我之所以这么做是因为最后的日期/时间取决于其他一些变量而且它永远不会相同(这取决于用户做某事的速度),而且我还存储了其他事情的初始日期.

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

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));
Run Code Online (Sandbox Code Playgroud)

问题是我从来没有得到正确的区别.我试着分开,24 * 60这将留给我秒,但我从来没有做对.那么我的逻辑有什么不对?我可能会犯一些愚蠢的错误,因为它已经很晚了,但令我烦恼的是我无法让它工作:)

Jua*_*tés 245

代码

var startDate = new Date();
// Do your operations
var endDate   = new Date();
var seconds = (endDate.getTime() - startDate.getTime()) / 1000;
Run Code Online (Sandbox Code Playgroud)

或者甚至比(endDate - startDate) / 1000评论中指出的更简单,除非你使用的是打字稿.


说明

您需要getTime()Date对象调用方法,然后简单地减去它们并除以1000(因为它最初是以毫秒为单位).作为额外的,当你调用getDate()方法时,你实际上是将月份的日期作为1到31之间的整数(不是基于零),而不是从调用getTime()方法获得的纪元时间,表示自19701月1日00:00以来的毫秒数


胡言乱语

根据您的日期相关操作,您可能希望投资集成诸如date.jsmoment.js之类的库,这使得开发人员更容易,但这只是个人偏好的问题.

例如在moment.js中我们会做的moment1.diff(moment2, "seconds")很漂亮.


这个答案有用的文档

  • 不需要*getTIme*,日期可以相互减去,因为* - *运算符会将它们强制转换为Numbers. (13认同)
  • 如果使用打字稿,getTime是必需的,它不允许除任何数字,数字或枚举之外的元素之间进行算术运算 (3认同)

Gau*_*Rai 9

下面的代码将以秒为单位给出时差。

进口基金会

var date1 = new Date(); // current date
var date2 = new Date("06/26/2018"); // mm/dd/yyyy format
var timeDiff = Math.abs(date2.getTime() - date1.getTime()); // in miliseconds
var timeDiffInSecond = Math.ceil(timeDiff / 1000); // in second
    
alert(timeDiffInSecond );
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以new Date().getTime()用于获取时间戳。然后您可以计算结束和开始之间的差异,最后将时间戳转换mss.

const start = new Date().getTime();
const end = new Date().getTime();

const diff = end - start;
const seconds = Math.floor(diff / 1000 % 60);
Run Code Online (Sandbox Code Playgroud)

  • 为什么要把时间限制在0-59之间?我们正在尝试计算两个时间之间的差异(以秒为单位)。现在与 5 分钟后的时间相差 300 秒。我们不会试图将其说成 300%60 对…… (3认同)

Ajm*_*san 7

准确而快速将在几秒钟内给出输出:

 let startDate = new Date()
 let endDate = new Date("yyyy-MM-dd'T'HH:mm:ssZ");
 let seconds = Math.round((endDate.getTime() - startDate.getTime()) / 1000);
Run Code Online (Sandbox Code Playgroud)


小智 6

<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>
Run Code Online (Sandbox Code Playgroud)