我在javascript中有这段代码来计算两个日期之间的秒数:
function dateDiffInSeconds(a, b) {
var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate(), a.getHours(), a.getMinutes(), a.getSeconds());
var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate(), b.getHours(), b.getMinutes(), b.getSeconds());
return Math.floor((utc2 - utc1) / 1000);
}
我已经制作了这个小setInterval
函数,让它每秒更新一次并在屏幕上显示数字:
var j = new Date('July, 05, 2012');
setInterval(function () {
var n = new Date();
document.getElementById("a").innerHTML = dateDiffInSeconds(j, n);
}, 1000);
这很有效,但没有问题。
现在我尝试使用相同的代码来计算该秒内的每一分钟,所以我想:
每隔60秒,将分钟
variable
加1;
所以我做到了这一点:
var j = new Date('July, 05, 2012');
var minutes = 0;
setInterval(function () {
var n = new Date();
document.getElementById("a").innerHTML = dateDiffInSeconds(j, n);
if(dateDiffInSeconds(j, n) > 60) {
minutes++;
console.log(mins);
}
}, 1000);
问题
当我运行此时,分钟变量正在计数,但仅在每次计数时,而不是每60秒。
通缉结果
如何制作它,以便在使用dateDiffInSeconds
函数计算的每60秒内按minutes
计算1
变量?
答案 0 :(得分:1)
您需要在循环中使用辅助计数器......
你的循环的伪代码:
secs = 1000
minutes = 0
minuteCounter = 0
for (xx=0;xx<secs;xx++){
minuteCounter++
if (minuteCounter==60){
//We've reached one minute
minutes++
minuteCounter=0
}
}
这将通过每次计数器达到60时添加一个来计算分钟数。
答案 1 :(得分:1)
你真的不需要“计算”分钟变量,你可以使用差异来计算它。如果要检测分钟数何时增加,您可以将新计算的分钟数与上次计算的值进行比较,如果它们不同,您可以采取措施:
function dateDiffInSeconds(a, b) {
return Math.floor((b.getTime() - a.getTime()) / 1000);
}
var j = new Date('July, 05, 2012');
var oldDiffInMinutes = null;
setInterval(function () {
var n = new Date();
var diffInSeconds = dateDiffInSeconds(j, n);
var diffInMinutes = Math.floor(diffInSeconds/60);
document.getElementById("a").innerHTML = diffInSeconds;
if (diffInMinutes !== oldDiffInMinutes) {
console.log("Minutes changed: " + diffInMinutes);
oldDiffInMinutes = diffInMinutes;
}
}, 1000);
答案 2 :(得分:0)
在这里看看这个答案:
Minutes: <span id="minutes"></span>
Seconds: <span id="seconds"></span>
function dateDiffInSeconds(a, b) {
var utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate(), a.getHours(), a.getMinutes(), a.getSeconds());
var utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate(), b.getHours(), b.getMinutes(), b.getSeconds());
return Math.floor((utc2 - utc1) / (1000));
}
var j = new Date();
var mins = 0;
document.getElementById("minutes").innerHTML = mins;
setInterval(function () {
var n = new Date();
document.getElementById("seconds").innerHTML = dateDiffInSeconds(j, n);
if(dateDiffInSeconds(j, n) > 60) {
mins++;
document.getElementById("minutes").innerHTML = mins;
j = new Date();
}
}, 1000)