计算2个日期之间的秒数时获得分钟数

时间:2014-07-02 18:39:41

标签: javascript

我在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变量?

Demo here (check console)

3 个答案:

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

http://jsfiddle.net/Y5mew/3/

答案 2 :(得分:0)

在这里看看这个答案:

http://jsfiddle.net/Y5mew/4/

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)