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


149

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

  • 设置一个初始日期,即现在;
  • 设置最终日期,该日期将是初始日期加上将来的秒数(例如,假设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秒,但我从来没有做对。那我的逻辑怎么了?我可能会犯一些愚蠢的错误,因为已经很晚了,但是我不敢让它正常工作:)


2
操作顺序是关键。
Dylan Cross

1
因此,您希望有一个时间戳,增加15秒,然后查看以秒为单位的区别。我会说差异很大的可能性是....等待它.. 15秒?
adeneo


1
我确实很了解您要尝试执行的操作(我认为),但是如果您使用新的Date()(即现在的Unix时间),请增加15秒,然后立即检查差异,差异将为15秒(减去计算所需的毫秒数),但我想您打算在将来以某种方式进行比较。
adeneo

1
为了证明我的观点,我真的不明白,这是您上面的示例的有效字段。如果您要弄清楚用户执行某项操作需要花费多长时间,通常会获得用户开始操作时的时间戳记以及用户完成操作时的时间戳记,并将其进行比较,然后便会知道花费了多长时间。15秒到底能干什么?
adeneo

Answers:


283

代码

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

甚至更简单,(endDate - startDate) / 1000如注释中指出的那样,除非您使用打字稿。


说明

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


兰特

根据与日期相关的操作的不同,您可能需要投资集成诸如date.jsmoment.js之类的库,这对于开发人员而言使事情变得容易得多,但这只是个人喜好问题。

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


有用的文档,这个答案


14
不需要getTIme,因为-运算符会将日期强制为数字,所以可以将日期彼此减去。
RobG

3
如果使用打字稿,getTime是必需的,它不允许除任何数字,数字或枚举之外的元素之间进行算术运算
zaffaste

您可以使用.valueOf(),这是-操作员在任何情况下都会调用的...
Heretic Monkey

1
如果我们还需要时/分时差怎么办...?我应该将其划分为60还是多个...?@Juan
gumuruh

请添加新的疑虑,个别问题,但因为这一个可能会被封闭,一式二份,到这里看看stackoverflow.com/questions/1322732/...
胡安·科尔特斯

5

您可以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);

4
<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>

1

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

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

0

尝试使用高级编程语言中的专用功能。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);

0

使用momentjs从现在到10分钟之间的时差

let start_time = moment().format('YYYY-MM-DD HH:mm:ss');
let next_time = moment().add(10, 'm').format('YYYY-MM-DD HH:mm:ss');

let diff_milliseconds = Date.parse(next_time) - Date.parse(star_time);
let diff_seconds = diff_milliseconds * 1000;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.