本文最后更新于2017-12-19,已超过 1年没有更新,如果文章内容、图片或者下载资源失效,请留言反馈,我会及时处理,谢谢!
温馨提示:本文共1390个字,读完预计4分钟。
如题,iOS系统下,如果date格式不符合格式的话,会导致不显示或者NAN等问题。
先看一个要实现的场景:
如图:
一般正常情况使用date都是, new Date()或者自己封装一个格式化日期方法;
举个栗子 代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | Date.prototype.format = function(fmt) { var o = { "M+" : this.getMonth()+1, //月份 "d+" : this.getDate(), //日 "h+" : this.getHours(), //小时 "m+" : this.getMinutes(), //分 "s+" : this.getSeconds(), //秒 "q+" : Math.floor((this.getMonth()+3)/3), //季度 "S" : this.getMilliseconds() //毫秒 }; if(/(y+)/.test(fmt)) { fmt = fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); } for(var k in o) { if(new RegExp("("+ k +")").test(fmt)){ fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length))); } } return fmt; }; //这里假如接口返回的日期不是时间戳,而是'2017-12-18 15:00:48'这种; var monthArr = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月']; var currentDate = new Date('2017-12-18 15:00:48').getTime(); var date = new Date(currentDate); var day = date.format("dd"); var month = date.format('MM'); console.log('格式化后的日期是:'+ day + ' / ' + monthArr[parseInt(month)-1]); |
以上代码经测试,在Chrome和Firefox下都没有问题。
但是在safari下提示如图:
查阅了MDN, 解决方法如下:
将:
1 | var currentDate = new Date('2017-12-18 15:00:48').getTime(); |
改为:
1 2 3 4 5 | var currentDate = new Date('2017-12-18 15:00:48'.replace(/\s/, 'T')).getTime(); // 或者 var currentDate = new Date('2017-12-18 15:00:48'.replace(/-/g, '/')).getTime(); |
此问题即可解决。
当然也有其他的解决方法,此处不再展开,有兴趣可以自己研究。
参考文档:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse
https://stackoverflow.com/questions/4310953/invalid-date-in-safari
鸟儿叫,花儿笑,一年一季春来到!
新春佳节到。祝好!祝好!
不错不错!内容感觉好极了!
博客还真是个好东西!
毫无疑问,这个是要支持的!
新年好呀,新年好呀,祝福博主新年好!