今天有個需求,要在頁面上做當前時間距離下個月1號的倒計時。在網上找了很多案例也試了很多,大部分都是獲取本地當前時間,然后設置結束時間進行計算,然后倒計時。但是有幾個問題:
1.如果本地時間和服務器時間是一樣的那么就不會出現什么問題,
2.由於無法保證所有用戶的本地時間都與服務器時間相同,而使用 new Date() 獲取的本地時間,那么如果用戶修改本地時間,就會對倒計時進行影響,從而出現問題
解決辦法:
從后台獲取 開始時間和結束時間的時間戳來進行倒計時,這樣的話就不用去管本地的時間是否與服務器系統時間相同
具體代碼如下:
<time id="timer">26天6小時</time>
第一種使用setInterval來進行倒計時
<script>
var startTime=1508428800;//開始時間
var endTime=1508428860; //結束時間
setInterval(function(){
var ts =endTime-startTime;//計算剩余的毫秒數
console.log(ts);
var dd = parseInt(ts / 60 / 60 / 24, 10);//計算剩余的天數
var hh = parseInt(ts / 60 / 60 % 24, 10);//計算剩余的小時數
var mm = parseInt(ts / 60 % 60, 10);//計算剩余的分鍾數
var ss = parseInt(ts % 60, 10);//計算剩余的秒數
dd = checkTime(dd);
hh = checkTime(hh);
mm = checkTime(mm);
ss = checkTime(ss);
if(ts>0){
document.getElementById("timer").innerHTML = dd + "天" + hh + "時" + mm + "分" + ss + "秒";
startTime++;
}else if(ts<0){
document.getElementById("timer").innerHTML="00:00:00";
location.reload();
}
},1000);
function checkTime(i){
if (i < =10) {
i = "0" + i;
}
return i;
}
</script>
第二種使用setTimeout來進行倒計時
var startTime2=$('.start').html();//開始時間
var endTime2=$('.end').html(); //結束時間
var countup=function(){
var ts =endTime2-startTime2;//計算剩余的毫秒數
var dd = parseInt(ts / 60 / 60 / 24, 10);//計算剩余的天數
var hh = parseInt(ts / 60 / 60 % 24, 10);//計算剩余的小時數
var mm = parseInt(ts / 60 % 60, 10);//計算剩余的分鍾數
var ss = parseInt(ts % 60, 10);//計算剩余的秒數
dd = checkTime(dd);
hh = checkTime(hh);
mm = checkTime(mm);
ss = checkTime(ss);
if(dd>0){
$('.happy_money').html('已獲取收益資格,系統將在'+dd+'天后將收益發放到您的賬戶,請注意查收哦!');
}
if(hh>1 && dd<=0){
$('.happy_money').html('已獲取收益資格,系統將在'+hh+'小時后將收益發放到您的賬戶,請注意查收哦!');
}
if(hh<1 && dd<=0){
$('.happy_money').html('已獲取收益資格,系統將在'+mm+'分鍾后將收益發放到您的賬戶,請注意查收哦!');
}
if(ts>0){
$('#timer').html(dd + "天" + hh + "時" + mm + "分" + ss + "秒");
startTime2++;
}
else if(ts<=0){
$('#timer').html("00:00:00");
location.reload();
}
setTimeout(countup, 1000);
};
function checkTime(i){
if (i < 10) {
i = "0" + i;
}
return i;
}
countup();
以上兩種都是根據獲得兩個時間戳,進行倒計時。簡單的效果。但是由於第一次寫倒計時,在測試的時候遇到一些問題,IOS手機的safari瀏覽器不支持兩個數相減得到的倒計時,就算把數字轉換成數字類型得到的也是NaN,所以最后的結論是只讓后台給出結束時間與
開始時間的差值時間戳就可以了,這樣的話,就不會出現任何問題。