计算两个时间差的倒计时定时器,离开时需要将所有定时器都清除才可以,否则将会一直定时下去,当时分秒为0也清除定时器
onUnload() {
// 离开页面清除定时器
this.records.forEach((item, index) => {
if (5 === item.status) {
clearInterval(this['timer' + index])
}
})
},
methods:{
getRecords(){
xxxxx
this.records.map((item,index)=>{
this.intervalExpireTime(item.expire_time, index);
})
},
intervalExpireTime(expire_time, index) {
// 解決ios解决为NaN问题
const endTime= new Date(expire_time.replace(/-/g, '/')).getTime();
this['timer' + index] = setInterval(() => {
const expire = (endTime - new Date()) / 1000;
let h = parseInt(expire / 60 / 60 % 24); // 相差小时
let m = parseInt(expire / 60 % 60); // 相差分钟
let s = parseInt(expire % 60); // 相差秒
h = h < 10 ? '0' + h : h; // 如果小于10补0
m = m < 10 ? '0' + m : m; // 如果小于10补0
s = s < 10 ? '0' + s : s; // 如果小于10补0
this.records[index].residue_time = h + ':' + m +
':' + s;
if (0 == h && 0 == m && 0 == s) { // 当时分秒为0也清除定时器
clearInterval(this['timer' + index])
}
}, 1000)
}
}
js将时间转换为时间戳在苹果手机上为NaN:
let stopTime = new Date('2017-08-12 23:00:00').getTime();
或者
let stopTime = new Date('2017-08-12 23:00:00').valueOf();
这个时候在
android手机正确转换,但是在ios上就会出现NaN
兼容ios
let stopTime = new Date('2017/08/12 23:00:00').getTime();
这样的格式在
ios和android上都可以进行显示
转换时间格式
let stopTime = new Date('2017-08-12 23:00:00'.replace(/-/g, '/')).getTime();
这样就可以解决后台传递时间带有-的格式!
iphone手机是不能对这种格式的时间进行格式化,需要把-改成/,也就是"2020/10/10 12:12:12"。
如下方法可以解决这个问题。调用:formatDate(time, "yyyy-MM-dd")