安卓手机及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个小时得到的才是北京时间,针对这个问题有两种解决方案:
当我遇到这个问题后进行百度,发现大部分的人都说直接将时间中的**-**替换成**/**就可以解决问题,其实不然,具体要看开发实际情况。通过打印可得后端转入的时间格式为**2020-09-25T06:45:49.000+0000**,如果单纯将其变成**2020/09/25 06:45:49**是存在8小时误差的,我们需要在**2020-09-25 06:45:49**基础上加上8个小时得到的才是北京时间,针对这个问题有两种解决方案:
- 将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;
- 下载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包所占内存比较大,具体看开发中实际情况!