我怎样才能找到两个UNIX时间戳之间的HH:MM:SS差异?

lwi*_*iii 0 javascript

我正在尝试创建某种计时器的东西.所以我有一些时间戳来标记完成时间,我得到脚本启动时的当前时间戳,然后我每秒增加1.我需要以某种方式计算这两者之间的差异,并以格式显示Hours : Minutes : Seconds.

这是我目前的解决方案,但显然它不起作用.end_time并且cur_time是时间戳:

diff = end_time - cur_time;
hours_diff = Math.ceil(diff/3600)
mins_diff = Math.ceil((diff-hours_diff)/60)
secs_diff = diff - hours_diff*3600 - mins_diff*60;
Run Code Online (Sandbox Code Playgroud)

Poi*_*nty 5

您需要从较小的单位开始并进行处理:

diff = Math.floor(diff / 1000);
var secs_diff = diff % 60;
diff = Math.floor(diff / 60);
var mins_diff = diff % 60;
diff = Math.floor(diff / 60);
var hours_diff = diff % 24;
diff = Math.floor(diff / 24);
// and so on, with the next divisor being 7
// for days by week, for example.
Run Code Online (Sandbox Code Playgroud)

在每一步,您执行除法和余数运算.其余部分为您提供当前单位.除以(和余数)的数量是下一个更大时间单位中的单位数.

初始除以1000假设您的时间戳以毫秒为单位.如果他们在几秒钟内,你就不需要那样.

你可以通过将除数和标签存储在数组中来使事情变得更整洁:

function timeDiff( tstart, tend ) {
  var diff = Math.floor((tend - tstart) / 1000), units = [
    { d: 60, l: "seconds" },
    { d: 60, l: "minutes" },
    { d: 24, l: "hours" },
    { d: 7, l: "days" }
  ];

  var s = '';
  for (var i = 0; i < units.length; ++i) {
    s = (diff % units[i].d) + " " + units[i].l + " " + s;
    diff = Math.floor(diff / units[i].d);
  }
  return s;
}
Run Code Online (Sandbox Code Playgroud)


los*_*nir 5

使用 JavaScriptDate对象将时间戳转换为日期和时间:

var timeDifference = end_time - cur_time;
var differenceDate = new Date(timeDifference * 1000);
var diffHours = differenceDate.getUTCHours();
var diffMinutes = differenceDate.getUTCMinutes();
var diffSeconds = differenceDate.getUTCSeconds();
Run Code Online (Sandbox Code Playgroud)

然后获取 H:M:S 格式的可读时间:

var readableDifference = diffHours + ':' + diffMinutes + ':' + diffSeconds;
Run Code Online (Sandbox Code Playgroud)

您必须乘以才能1000得到以毫秒为单位的差异(这是构造函数所Date期望的)。Unix 时间戳是自 1970 年 1 月 1 日以来以秒为单位的时间表示。

快速 JSFiddle 演示:http://jsfiddle.net/WaZQt/