我想用JS做一个从 2012年10月7月0点45分开始到现在经过了多少天多少小时。。这样的一个提示框,给个代码做参考。最好是随着时间的推移,能显示为:经过了 X年X月X天X小时X分X秒  这样的。

解决方案 »

  1.   

    两个时间戳相减得毫秒数,显示为 X天X小时X分X秒 就可以了。X年X月X天X小时X分X秒 显示方式是有分歧的,例如 2012年2月29日0点45 到 2012年3月29日0点45
    究竟是显示1个月还是0个月:显示1个月按2月的天数来29日来算,显示0个月按3月的天数来算,3月31日0点45之前未满一个月,都说得通。
      

  2.   

    楼上说的是对的,一般来说,时间差精确到天,才是最无误的。要精确到月或年的都有分岐
    下面调用是计算当前时间是2012年10月7月0点45分后多少天。
    若是换成:new Date().Diff(new Date(Date.parse('2013/10/07 00:45:00')));这样的调用方式,即可显示当前到指定日期还差多少天的倒计时效果
    <script type="text/javascript">
    Date.prototype.Diff=function(endTime,text){
            text=text||'{d}天 {h}:{m}:{s}';
            if((endTime.getTime()-this.getTime())>0){
                var b=endTime.getTime()-this.getTime(),c=[],tpl=['{d}','{h}','{m}','{s}'];
                c=[Math.floor(b/86400000),Math.floor(b%86400000/3600000),Math.floor(b%86400000%3600000/60000),Math.round(b%86400000%3600000%60000/1000)];
                if(c[2].toString().length==1){
                    c[2]='0'+c[2];
                };
                if(c[3].toString().length==1){
                    c[3]='0'+c[3];
                };
                for(var i=0;i<c.length;i++){
                    text=text.replace(tpl[i],c[i]);
                };
                return text;
            }else{return '已过期'}
        };
        function showtime(){
            document.getElementById('showtime').innerHTML=new Date(Date.parse('2012/10/07 00:45:00')).Diff(new Date());
            setTimeout(function(){
                showtime()
            },1000)
        };
    window.onload=function(){
            showtime();
        }
    </script>
    <div id="showtime"></div>
      

  3.   

    特殊情况忽视,不要过分纠结细节。2012年10月7月0点45分开始至今已经过了:<span id="time"></span>
    <script type="text/javascript">
        var t_begin=new Date(2012,(10-1),7,0,45,0);//指定时间
    setInterval(function(){
        var t_end=new Date();   //当前时间
        var i_time=t_end.getTime()-t_begin.getTime();  //两时间的毫秒差
            i_time=parseInt(i_time/1000);//转为共有多少秒
        var y=parseInt(i_time/(60*60*24*365)); //暂定365天为一年
        var i=i_time%(60*60*24*365);//2795994
        var m=parseInt(i/(60*60*24*30)); //暂定30天为一月
            i=i%(60*60*24*30);
        var d=parseInt(i/(60*60*24)); //24小时为一天
            i=i%(60*60*24);
        var h=parseInt(i/(60*60)); //60分钟为一小时
            i=i%(600*60);
        var M=parseInt(i/(60)); //60秒为一分钟
            i=i%60;
        var s=i;              //秒
        document.getElementById("time").innerHTML=y+"年"+m+"月"+d+"日 "+h+"小时"+M+"分"+s+"秒";
    },1000);
    </script>
      

  4.   

    距离2012建政日还剩<span id="Display"></span>
    <script type="text/javascript">
    var ndt=new Date(2012,10,1).getTime();
    var dis=document.getElementById("Display");
    function countDown(){
    var diff=ndt-new Date().getTime();
    dis.innerHTML=
    parseInt(diff/1000/3600/24)+"天"+parseInt(diff/1000/3600%24)+"小时"+
    parseInt(diff/1000/60%60)+"分"+parseInt(diff/1000%60)+"秒"+parseInt(diff%1000)+"毫秒";
    }
    window.setInterval('countDown();',100);
    </script>
    =========
    距离2012建政日还剩257天3小时17分31秒148毫秒