iOS真机时间显示为NANA

安卓手机及PC端支持时间为("YYYY-MM-DD HH:mm:ss")的格式,对于iOS手机来说这种格式是存在兼容性问题的,从而导致页面时间显示为NANA的问题,我们可以从iOS支持时间格式为("YYYY/MM/DD HH:mm:ss")入手。
当我遇到这个问题后进行百度,发现大部分的人都说直接将时间中的**-**替换成**/**就可以解决问题,其实不然,具体要看开发实际情况。通过打印可得后端转入的时间格式为**2020-09-25T06:45:49.000+0000**,如果单纯将其变成**2020/09/25 06:45:49**是存在8小时误差的,我们需要在**2020-09-25 06:45:49**基础上加上8个小时得到的才是北京时间,针对这个问题有两种解决方案:
  1. 2020-09-25T06:45:49.000+0000转化为2020/09/25 06:45:49,并就8小时的问题展开判断(没有进行验证,如果需要使用请自行验证)
var time = '2020-09-25T06:45:49.000+0000';
        var timeFilt = (time.replace(/T/g,' ')).replace(/-/g,'/')
        var timeFilts = timeFilt.slice(0,timeFilt.indexOf('.'))
        var date = new Date(timeFilts)
        // 获取年份
        var year = date.getFullYear();
        // 获取月份
        var month = date.getMonth()+1;
        // 获取日期
        var dDate = date.getDate();
        // 获取小时,设置为北京时间需加上上8小时
        var hour = date.getHours()+8;
        // hour大于24时进行判断,日期即dDate需加1
        if(hour > 24){
            hour = hour - 24;
            dDate += 1
        }
        // 1,3,5,7,8,10,12月份有31天,闰年二月有29天,平年28天,其他月份30天,需依次进行判断,超出月份加1
        if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12){
                if(dDate > 31){
                    dDate = dDate - 31;
                    month += 1;
                }
            }else if(month == 4 || month == 6 || month == 9 || month == 11){
                if(dDate > 30){
                    dDate = dDate - 30;
                    month += 1;
                }
            }
            // 判断输入时间的2月份的年份是平年还是闰年
            if(month == 2){
                if(year % 4 == 0 && year % 100 !== 0 || year % 400 == 0){
                    if(dDate > 29){
                        dDate = dDate - 29;
                        month += 1;
                    }
                }else {
                    if(dDate > 28){
                        dDate = dDate - 28;
                        month += 1;
                    }
                }
            }
        // 判断月份是否大于12,是的话年份加1
        if(month > 12){
            month = month -12;
            year += 1
        }
        hour = hour < 10 ? '0' + hour : hour;
        dDate = dDate < 10 ? '0' + dDate : dDate;
        month = month < 10 ? '0' + month : month;
        // 获取分钟
        var minute = date.getMinutes();
        minute = minute < 10 ? '0' + minute : minute;
        // 获取秒数
        var second = date.getSeconds();
        second = second < 10 ? '0' + second : second;

        var finalTime = year+'-'+month+'-'+dDate+' '+hour+':'+minute+':'+second;
  1. 下载moment.js包,在对应的页面中引入moment.js,import moment from ‘moment’,在filters进行过滤
formatDateFilter(time) {
                if(time != null){
                    var timeData = (moment(time).format("YYYY/MM/DD HH:mm:ss")).replace(/\//g,'-')
                    return timeData
                }
            },

方法1,2都有各自的优缺点,方法1比较复杂,但所占内存比较小,方法2比较简单,moment包所占内存比较大,具体看开发中实际情况!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值