js计算两个时间差的倒计时定时器、js将时间转换为时间戳在苹果手机上为NaN

102 阅读1分钟

计算两个时间差的倒计时定时器,离开时需要将所有定时器都清除才可以,否则将会一直定时下去,当时分秒为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)
    }
}

image.png

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();

这样的格式在iosandroid上都可以进行显示

转换时间格式

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")

来源链接:blog.csdn.net/weixin_4579…

来源链接:blog.jacklau2018.com/work/apple-…