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

IT技术 javascript date
2021-02-07 12:22:36

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

  • 设置一个初始日期,即现在;
  • 设置一个最终日期,这将是初始日期加上未来的一些秒数(例如,假设为 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));

问题是我从来没有得到正确的区别。我试过除以24 * 60哪个会给我留下秒数,但我从来没有做对。那么我的逻辑有什么问题吗?我可能会犯一些愚蠢的错误,因为已经很晚了,但是我无法让它工作让我很困扰:)

6个回答

代码

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

或者甚至更简单(endDate - startDate) / 1000,除非您使用typescript,否则评论中指出。


说明

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


咆哮

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

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


此答案的有用文档

不需要getTIme,日期可以相互减去,因为-运算符会将它们强制为数字。
2021-03-16 12:22:36
请添加新的疑问作为个别问题,但由于这个问题可能会作为重复关闭,请在此处查看stackoverflow.com/questions/1322732/...
2021-03-21 12:22:36
如果您使用typescript,则 getTime 是必需的,它不允许在任何、数字或枚举以外的元素之间进行算术运算
2021-03-31 12:22:36
如果我们还需要小时/分钟的时差...?我应该把它除以 60 还是它的倍数......?@胡安
2021-04-04 12:22:36
您可以使用.valueOf(),这是-操作员在任何情况下都会调用的...
2021-04-08 12:22:36

您可以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);
为什么要把时间限制在0-59之间?我们正在尝试以秒为单位计算两次之间的差异。现在和从现在开始的 5 分钟之间的差异是 300 秒。我们不会试图告诉它 300%60 正确......
2021-03-13 12:22:36
我们为什么要做 %60?
2021-03-27 12:22:36
@Anand Shiva 这会将结果限制为 0-59,因为余数运算符 (%) 返回除法运算的余数和60 % 60 = 0
2021-04-01 12:22:36
<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>

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

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

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

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