new Date()
传参的兼容性
可以在类似的博文new Date处理日期格式及兼容浏览器问题看到'2019/01/01'
格式的字符串才是被各个浏览器所广泛支持的。- 一个简单的解决方案
在new Date()
前通过一个转换函数矫正参数:function formatDateArgs(date) { date.replace(/-/g, '/'); date.replace(/./g, '/'); return date; }
var datestr = '2019-01-01'; datestr = formatDateArgs(datestr); var date = new Date(datestr);
- 为什么要使用AOP编程
需要同时解决几十个文件中的该兼容性问题,在不改动原代码的基础下,以添加代码的方式解决。 - 以下代码需要经过Babel编译,在使用
new Date()
前引入/* eslint-disable */ Object.defineProperty(Function.prototype, 'beforeDateNew', { writable: true, enumerable: false, configurable: true, value: function(beforefn){ var self = this; return function(){ var args = beforefn.apply(this, arguments); if (!args) { args = [].slice.call(arguments); } return new self(...args); } } }); const dp = Date.prototype; const {UTC, length, name, now, parse} = Date; Date = Date.beforeDateNew(function(){ var args = [].slice.call(arguments); // console.log('new Date入参:', args); var intime = args[0]; if (!intime) { return; } var isStringTime = typeof intime === 'string'; if (!isStringTime) { return; } var intime_sp; var intime_sp1 = intime.split('.'); var intime_sp2 = intime.split('-'); if (intime_sp1.length >= 3) { intime_sp = intime_sp1; } else if (intime_sp2.length >= 3) { intime_sp = intime_sp2; } if (!intime_sp) { return; } var outtime = intime_sp.join('/'); // console.log('new Date出参:', outtime); args[0] = outtime; return args; }); Date.prototype = dp; Date.UTC = UTC; Date.now = now; Date.parse = parse; try { Object.defineProperty(Date, 'length', { writable: true, value: length }); Object.defineProperty(Date, 'length', { writable: false }); } catch(e) { console.log(e); } try { Object.defineProperty(Date, 'name', { writable: true, value: name }); Object.defineProperty(Date, 'name', { writable: false }); } catch(e) { console.log(e); }
利用AOP编程解决各浏览器对new Date()传参的兼容性问题
最新推荐文章于 2020-06-09 10:37:10 发布