使用服务器时间的jQuery计时器/倒计时

时间:2012-02-14 18:59:16

标签: c# jquery timer

我正在尝试每10分钟倒计时一次(根据服务器时间而不是客户端)。每隔10分钟(例如上午10点,上午10点10分,上午10点20分:上午10点),需要刷新页面并重新开始。

我找到了超时功能,但没有使用服务器时间,我可以重置数十。

以前有人做过这样的事吗?

由于

3 个答案:

答案 0 :(得分:0)

您可以渲染计时器表单服务器端的启动,然后使用它来控制服务器端的计时器逻辑。

E.g。

var timerStart = new Date("dateString");//Render this from server side

然后在倒计时逻辑中使用timerStart变量。

在JavaScript中创建新日期的一些示例。

new Date(milliseconds) //milliseconds since 1970/01/01
new Date(dateString)
new Date(year, month, day, hours, minutes, seconds, milliseconds)

答案 1 :(得分:0)

我不熟悉C#,所以请原谅PHP示例,但概念是一样的。在您的Javascript中,创建一个变量,该变量保存下一次刷新的时间长度..

<script>
    var firstRefresh=<?php echo $numberOfMiliSecondsToFirstRefresh; ?>;
</script>

然后你可以设置你的第一个计时器在那个时间内刷新,从那时起,你可以每10分钟刷新一次......

答案 2 :(得分:0)

我最终在评论/答案和其他帖子中使用了一些想法并提出了这个想法。

每10分钟倒计时(同样,根据服务器)并显示计时器值。当它达到“0”( - 1:59)时,它将重新加载页面并在10分钟后重新开始。

可能不是最干净的代码,但它看起来效果很好:

<script>
var currentMin = @DateTime.Now.Minute;
var currentSec = @DateTime.Now.Second;
var minutesLeft = 0;
var secondsLeft = 0;

$(document).ready(function() {
    setupTimer();
});

function setupTimer() {
    var baseMins = 0;
    if (currentMin >= 0 && currentMin <= 9)
        baseMins = 10;
    else if (currentMin >= 10 && currentMin <= 19)
        baseMins = 20;
    else if (currentMin >= 20 && currentMin <= 29)
        baseMins = 30;
    else if (currentMin >= 30 && currentMin <= 39)
        baseMins = 40;
    else if (currentMin >= 40 && currentMin <= 49)
        baseMins = 50;
    else if (currentMin >= 50 && currentMin <= 59)
        baseMins = 60;

    minutesLeft = (baseMins - 1) - currentMin;
    secondsLeft = 60 - currentSec;

    setInterval(decreaseTimer, 1000);
}

function decreaseTimer() {
    secondsLeft--;
    if (secondsLeft == -1) {
        minutesLeft--;
        secondsLeft = 59;
    }
    if (minutesLeft == -1 && secondsLeft == 59) {
        location.reload();
    }
    displayTimer();
}

function displayTimer() {
    if (minutesLeft == 0)
        minutesLeft = "0";
    if (secondsLeft < 10)
        secondsLeft = "0" + secondsLeft;
    var timerDisplay = minutesLeft + ":" + secondsLeft;
    $("#timer").text(timerDisplay);
}
</script>