因為項目需要做了一個倒計時的小功能,雖然不是多難,但是整理出來以后用的時候更方便。
本次項目為vue項目,js項目同理,只是語法略微不同。
首先肯定要拿到結(jié)束時間:
this.endTime = res.endTime;然后調(diào)用倒計時計算函數(shù),以便公用:
this.suan();并且每秒調(diào)用一次:
var timer = setInterval(() =>{ this.suan(); },1000);在計算函數(shù)內(nèi)部:
suan(){
this.time = new Date().getTime() / 1000; // 獲取當(dāng)前時間
this.timeCount.time = (this.endTime - this.time); // 倒計時計算
if(this.timeCount<0){this.timeCount=0} //防止倒計時為負
var arr = this.toDay(this.timeCount); //時間差轉(zhuǎn)換為天、時、分、秒
// 數(shù)據(jù)更新不重新渲染解決方案
this.$set(this.timeCount,'t',{
days: arr[0], //拿到toDay返回的數(shù)組中對應(yīng)的數(shù)據(jù),賦值給對應(yīng)屬性
hours: arr[1],
minutes: arr[2],
seconds: arr[3]
})
}
// this.timeCount為倒計時對象,下面包含時間差的時間戳、以及轉(zhuǎn)為天時分秒后的數(shù)據(jù),至于它為什么是一個對象,是因為在vue內(nèi)直接改變data中的數(shù)據(jù),頁面數(shù)據(jù)不會第一時間更新,所以改為——更改數(shù)據(jù)的屬性
時間戳轉(zhuǎn)為時間段函數(shù)
toDay(mss){
var days = parseInt(mss.time / (1000 * 60 * 60 * 24));
var hours = parseInt((mss.time % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = parseInt((mss.time % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.round((mss.time % (1000 * 60)) / 1000);
var arr=[days,hours,minutes,seconds];
return arr; //用一個數(shù)組存儲day hours min sec數(shù)據(jù),并return
}
附贈時間戳轉(zhuǎn)為時間函數(shù),用于測試獲取的時間戳是否正確
toDate(timestamp){
var date = new Date(timestamp * 1000);//時間戳為10位需*1000,時間戳為13位的話不需乘1000
var Y = date.getFullYear() + '-';
var D = (date.getDate() < 10 ? '0'+date.getDate() : date.getDate()) + ' ';
var h = (date.getHours() < 10 ? '0'+date.getHours() : date.getHours()) + ':';
var m = (date.getMinutes() < 10 ? '0'+date.getMinutes() : date.getMinutes()) + ':';
var s = (date.getSeconds() < 10 ? '0'+date.getSeconds() : date.getSeconds());
return Y+M+D+h+m+s;
}