<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>限时抢购啦!_web前端寒风webbise.com</title>
<style type="text/css">
*{margin:0;padding:0;}
#content{width:300px;margin:0 auto;padding:10px;background:#eee;border:1px solid #999;}
#content p span{color:red;font:bold 20px Arial;}
</style>
</head>
<body><div id="content">
<h1>限时抢购啦!</h1>
<p>还剩<span id="times"></span></p>
<p><a href="http://www.webbise.com">web前端寒风</a></p>
</div>
<SCRIPT LANGUAGE="JavaScript">
function _fresh()
{
 var endtime=new Date("November 19, 2010 11:38:30");
 var nowtime = new Date();
 var leftsecond=parseInt((endtime.getTime()-nowtime.getTime())/1000);
 if(leftsecond<0){leftsecond=0;}
 __d=parseInt(leftsecond/3600/24);
 __h=parseInt((leftsecond/3600)%24);
 __m=parseInt((leftsecond/60)%60);
 __s=parseInt(leftsecond%60);
 document.getElementById("times").innerHTML=__d+"天 "+__h+"小时"+__m+"分"+__s+"秒";
}
_fresh()
setInterval(_fresh,1000);
</SCRIPT>
</body>
</html>这个倒计时效果可以,但是无法获取服务器端时间,传到服务器上后,更改本地计算机时间,倒计时跟着变化。如何获取服务器端时间呢,谢谢!!!!!

解决方案 »

  1.   

    一般剩余时间都是在服务器端计算好的
    不知道你服务器端是什么语言,我用的是PHP
    给你个例子,你参考下<SCRIPT LANGUAGE="JavaScript">
    function _fresh()
    {
     //var endtime=new Date("November 19, 2010 11:38:30");
    // var nowtime = new Date();
    // var leftsecond=parseInt((endtime.getTime()-nowtime.getTime())/1000);
    var leftsecond=<?php echo time() - $endtime;?>;//这里是PHP的语法,time()函数是当前时间戳,$endtime是数据库保存的结束时间
     if(leftsecond<0){leftsecond=0;}
     __d=parseInt(leftsecond/3600/24);
     __h=parseInt((leftsecond/3600)%24);
     __m=parseInt((leftsecond/60)%60);
     __s=parseInt(leftsecond%60);
     document.getElementById("times").innerHTML=__d+"天 "+__h+"小时"+__m+"分"+__s+"秒";
    }
    _fresh()
    setInterval(_fresh,1000);
    </SCRIPT>
      

  2.   

    谢谢楼上,我的是asp   
      

  3.   

    原理是一样的,就是把ASP代码嵌进去,用ASP的输出语句输出剩余时间的秒数
      

  4.   


    把你获取时间的操作换成是ASP的代码就可以了,如Now函数之类的。
    不过感觉你的代码好像只能获取一次吧
      

  5.   

    你可以先从服务器读取时间
    然后通过JS获取Div "time"的时间再递减就可以了!!<div id="time" style="display:none;"><%response.write(now)%></div>
      

  6.   

    <%
    yuefen="November"
    tian="20"
    nian="2010"
    shijian="00:00:00"
    yuefen1=right("00"&month(now()),2)
    if yuefen1="01" then
      yuefen1="January"
     elseif yuefen1="02" then
     yuefen1="February"
     elseif yuefen1="03" then
     yuefen1="March"
     elseif yuefen1="04" then
     yuefen1="April"
     elseif yuefen1="05" then
     yuefen1="May"
     elseif yuefen1="06" then
     yuefen1="June"
     elseif yuefen1="07" then
     yuefen1="July"
     elseif yuefen1="08" then
     yuefen1="August"
     elseif yuefen1="09" then
     yuefen1="September"
     elseif yuefen1="10" then
     yuefen1="October"
     elseif yuefen1="11" then
     yuefen1="November"
     elseif yuefen1="12" then
     yuefen1="December" 
    end if
    tian1=right("00"&day(now()),2)
    nian1=year(now())
    shijian1=right("00"&hour(now()),2)&":"&right("00"&minute(now()),2)&":"&right("00"&second(now()),2)
    %>
    <p>还剩<span id="times"></span></p>
    <SCRIPT LANGUAGE="JavaScript">function _fresh()
    {
     var nowtime = new Date("<%=yuefen1%>,<%=tian1%>,<%=nian1%>,<%=shijian1%>");
     var endtime=new Date("<%=yuefen%>,<%=tian%>,<%=nian%>,<%=shijian%>");
     var leftsecond=parseInt((endtime.getTime()-nowtime.getTime())/1000);
     if(leftsecond<0){leftsecond=0;}
     __d=parseInt(leftsecond/3600/24);
     __h=parseInt((leftsecond/3600)%24);
     __m=parseInt((leftsecond/60)%60);
     __s=parseInt(leftsecond%60);
     document.getElementById("times").innerHTML=__d+"天 "+__h+"小时"+__m+"分"+__s+"秒";
    }
    _fresh()
    setInterval(_fresh,1000);
    </SCRIPT>这个是服务器端时间,但是没有倒计时的效果了。楼上你看一下!
      

  7.   

    在if前加个alert(leftsecond);打印出来看看你计算的时间是否正确
      

  8.   

    说错了,你的leftsecond能不能直接用ASP计算好赋值给她呢,参考我前面给出的代码
      

  9.   

    把变量放到外面来,这个你试试
     var nowtime = new Date("<%=yuefen1%>,<%=tian1%>,<%=nian1%>,<%=shijian1%>");
     var endtime=new Date("<%=yuefen%>,<%=tian%>,<%=nian%>,<%=shijian%>");
     var leftsecond=parseInt((endtime.getTime()-nowtime.getTime())/1000);
    function _fresh()
    {
    leftsecond--;
     if(leftsecond<0){leftsecond=0;}
     __d=parseInt(leftsecond/3600/24);
     __h=parseInt((leftsecond/3600)%24);
     __m=parseInt((leftsecond/60)%60);
     __s=parseInt(leftsecond%60);
     document.getElementById("times").innerHTML=__d+"天 "+__h+"小时"+__m+"分"+__s+"秒";
    }
      

  10.   

    现在是nowtime 时间只获取了一次,如果asp计算好的时间给leftsecond他的话也是给了一次,如何能没执行一次setInterval(_fresh,1000); 就给一次nowtime 
      

  11.   

    如何获取一次nowtime后就直接从这个时间点开始倒计时呢。
      

  12.   

    now()函数就可以了!! 再根据上面的方法 更新!!!
      

  13.   

    你的leftsecond应该是剩余时间吧,按照我前面的方法,把剩余时间在函数外执行获得一次,然后再函数里面每秒减一,那么到0的时候就是时间倒计时结束了。
      

  14.   

    不会吧,你在函数里加个alert(leftsecond)看看他每秒有没有减少
      

  15.   

    我想问下。。你以什么时间为准。
    倒计时总有个截止时间啊!
    我做了一个JS读取服务器时间给<span id="severtime">2010/11/19 10:00</span>这个就可以了!
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>读取服务器时间,倒计时!</title>
    <body>
    <script type="text/javascript">
        <!--
            var $ = function(id){ return document.getElementById(id)}; 
            function getDiffDate(m){
                m-=(D=parseInt(m/86400000))*86400000;
                m-=(H=parseInt(m/3600000))*3600000;
                S=parseInt((m-=(M=parseInt(m/60000))*60000)/1000);
    if(M<10 & M>0)
    {
    M='0'+M;
    }
    if(H<10 & H>0)
    {
    H='0'+H;
    }
    if(S<10)
    {
    S='0'+S;
    }
    if(m>0)
                return D+'天'+H+'时'+M+'分'+S+'秒';
    else
    {
    return "已经结束!";
    }
            }
            window.onload = function(){
                var std=setInterval(function(){
    var severtime=$("severtime").innerHTML;
    var stdf=getDiffDate(new Date(severtime)-new Date())
    if(stdf!="已结束!")
                    $("diffTime").innerHTML =stdf ; // 参数为两个时间的毫秒差
    else
    $("diffTime").innerHTML =stdf
    clearInterval(std);
                    }, 1000);
            }        
        //-->
        </script>
     </head>
    <body>
    <div>描述:severtime:为读取服务器时间!如果时间差为0或小于0表示”已经结束!“</div>
    <div  style="width:300px;height:40px;line-height:40px;background-color:#C0C0C0;font-size:12px;border:2px solid #808080">
        距离<span id="severtime">2010/11/19 10:00</span>还剩:<span id="diffTime" style="color:#FF0000;font-weight:bold"></span>
    </div>
    </body>
    </html>