【问题标题】:Countdown timer in asp.netasp.net中的倒数计时器
【发布时间】:2010-05-20 07:22:45
【问题描述】:

我正在使用带有 C# 的 asp.net 3.5。 我想创建一个倒数计时器,我的要求是这样的:

倒计时结束日期:2010 年 6 月 16 日 所以,在 6 月 16 日到来之前,我的计时器会显示重设时间。

请让我知道如何实现它,我用谷歌搜索,但我没有得到解决问题的 excat 解决方案。

提前致谢。

【问题讨论】:

  • 另外,我想显示计时器每秒减少一次。请帮忙

标签: c# asp.net countdown


【解决方案1】:

这是您需要使用 Javascript 解决的问题。您需要在服务器上做的唯一一件事就是将结束日期设置为 Javascript 变量。您需要 Javascript,因为您只从服务器加载页面。之后你需要在客户端处理倒计时。

Javascript

<script type="text/javascript">
    function countdown_clock(clockID, year, month, day, hour, minute) {
        countdown(clockID, year, month, day, hour, minute);
    }

    function countdown(clockID, year, month, day, hour, minute) {
        Today = new Date();
        Todays_Year = Today.getFullYear();
        Todays_Month = Today.getMonth();

        //Convert both today's date and the target date into miliseconds.                           
        Todays_Date = (new Date(Todays_Year, Todays_Month, Today.getDate(),
                             Today.getHours(), Today.getMinutes(), Today.getSeconds())).getTime();
        Target_Date = (new Date(year, month - 1, day, hour, minute, 00)).getTime();

        //Find their difference, and convert that into seconds.                  
        Time_Left = Math.round((Target_Date - Todays_Date) / 1000);

        if (Time_Left < 0)
            Time_Left = 0;

        days = Math.floor(Time_Left / (60 * 60 * 24));
        Time_Left %= (60 * 60 * 24);
        hours = Math.floor(Time_Left / (60 * 60));
        Time_Left %= (60 * 60);
        minutes = Math.floor(Time_Left / 60);
        Time_Left %= 60;
        seconds = Time_Left;

        dps = 's'; hps = 's'; mps = 's'; sps = 's';
        //ps is short for plural suffix.
        if (days == 1) dps = '';
        if (hours == 1) hps = '';
        if (minutes == 1) mps = '';
        if (seconds == 1) sps = '';

        var clock = document.getElementById(clockID);
        clock.innerHTML = days + ' day' + dps + ' ';
        clock.innerHTML += hours + ' hour' + hps + ' ';
        clock.innerHTML += minutes + ' minute' + mps + ' and ';
        clock.innerHTML += seconds + ' second' + sps;

        //Recursive call, keeps the clock ticking.
        setTimeout('countdown("' + clockID + '",' + year + ',' + month + ',' + day + ',' + hour + ',' + minute + ');', 1000);
    }
</script>

ASP.NET

protected override void OnPreRender(EventArgs e)
    {
        DateTime endDate = new DateTime(2010, 6, 1, 0, 0, 0);
        string script = string.Format("countdown_clock('clock', {0}, {1}, {2}, {3}, {4});", endDate.Year, endDate.Month, endDate.Day, endDate.Hour, endDate.Minute);
        ScriptManager.RegisterStartupScript(this, this.GetType(), "countdown", script, true);

        base.OnPreRender(e);
    }

脚本取自 My Little Scripts 的修改示例。

【讨论】:

    【解决方案2】:

    如果您喜欢简单,请使用 DateTime。

    DateTime EventTime = new DateTime(2010, 6, 16);
    TimeSpan Duration = EventTime - DateTime.Now;
    string TimeTillEvent = Duration.ToString();
    

    【讨论】:

    • 嗨,马克,感谢您的回复。如何让时间像数字时钟一样减少每秒的时间?
    • 如果你想让它倒计时,你不能用javascript来解决它。看看乔普的回答。我的解决方案仅针对每个请求进行更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多