iOS移动端设备下js时间倒计时报错nan
文章 4092 0 0 0
发布时间:2019年01月05日

概述

追梦猪最近在做移动端项目 ,有个设置开始时间和结束时间,然后倒计时 这个活动还有几天。在安卓上能正确转换时间,但在iOS上不能显示,为NaN-NaN1-NaN Invalid Date

就好比new Date('2017-09-18 14:58:32').getTime();
//在ios上死活拿不到时间戳显示NaN

追梦猪查阅了相关的资料,后来发现:

原来是低版本的Safari解释new Date('2013-10-21')这个对象不一样,在IOS5中的Safari不支持这种写法,

而它支持的写法为new Date('2013','10','21'),这样写就能解决”Invalid Date“的问题

所以想要正确显示时间在iOS上,应该这么写

new Date("2010-03-15 10:30:00".replace(/-/g,'/')).getTime(); 解决了问题!!

然后附上24小时时间相差的倒计时代码

setInterval(()=>{
    let data = new Date();
    var u = navigator.userAgent, app = navigator.appVersion;
    var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //g
    var isIOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
    if (isAndroid) {
        var datas = data.getFullYear()+'-'+(data.getMonth()+1)+'-'+(data.getDate()+1)+' '+'23:59:59';
    }
    if (isIOS) {
        var cc = data.getFullYear()+'-'+(data.getMonth()+1)+'-'+(data.getDate()+1)+' '+'23:59:59';
        var datas = cc.replace(/-/g,'/');
    }
    const endtime = new Date(datas);
    const nowtime = new Date();
    let leftTime = parseInt((endtime.getTime()-nowtime.getTime())/1000);
    let d = parseInt(leftTime/(246060));
    let h = this.formate(parseInt(leftTime/(60*60)%24))
    let m = this.formate(parseInt(leftTime/60%60))
    let s = this.formate(parseInt(leftTime%60))
    this.h =  h
    this.m = m
    this.s = s
},1000)

JS判断用户手机是IOS还是Android

$(function () {
    var u = navigator.userAgent, app = navigator.appVersion;
    var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1; //g
    var isIOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
    if (isAndroid) {
        alert("安卓机!")
    } if (isIOS) {
        alert("苹果果机!")
    }
});
评论专区