我正在尝试创建某种计时器的东西.所以我有一些时间戳来标记完成时间,我得到脚本启动时的当前时间戳,然后我每秒增加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)
您需要从较小的单位开始并进行处理:
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)
使用 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/
| 归档时间: |
|
| 查看次数: |
3175 次 |
| 最近记录: |