一個網頁倒計時的實現

        最近要作一個網站上的活動倒計時的功能。在網上搜了一下,網上關於js倒計時的代碼卻是很多,可是正正能夠應用到生產環境的則是少之又少。html

         好比我用到的這個就是這樣的:ajax

var endDate=new Date(2014,7,25,23,59,59);
var begin = new Date();
var intDiff=Math.round((endDate.getTime()-begin)/1000);//初始日期
	
	function timer(intDiff){
		window.setInterval(function(){
		var day=0,
			hour=0,
			minute=0,
			second=0;//時間默認值		
		if(intDiff > 0){
			day = Math.floor(intDiff / (60 * 60 * 24));
			hour = Math.floor(intDiff / (60 * 60)) - (day * 24);
			minute = Math.floor(intDiff / 60) - (day * 24 * 60) - (hour * 60);
			second = Math.floor(intDiff) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60);
		}
		if(day==0&&hour==0&&minute==0&&second<=0){
			$("#timeshow").html("活動結束。");
		}
		if (minute <= 9) minute = '0' + minute;
		if (second <= 9) second = '0' + second;
		$('#day_show').html(day+'天');
		$('#hour_show').html(hour+'小時');
		$('#minute_show').html(minute+'分');
		$('#second_show').html(second+'秒');
		intDiff--;
		
		}, 1000);
	} 
	$(function(){
		timer(intDiff);
	});

看到了沒,因爲js是運行在客戶端的,沒法拿到服務器的時間,因此會致使「一千個讀者眼裏又一千個哈姆雷特」,這樣是不對的,因此要得到服務器的時間。服務器

第一想到的是用ajax請求得到服務器的時間,可是會有問題,ajax是異步請求,js執行到那一段的時候ajax尚未執行完成,因此會出現取不到值得狀況。因此否決了這樣的作法。異步

解決方法是:網站

  <input type="hidden" id="serverTime" value="<%= request.getAttribute("time")%>"/>

在請求到這個頁面以前,把時間放到atrribute裏面,在頁面拿到這個值,放到一個隱藏域裏面。注意:定時器的代碼要放到取值操做的後米阿尼,不然會出現隱藏域時空的狀況。code


Get!
server

相關文章
相關標籤/搜索