日期函数每次取年月日都要调用Date的函数,有点麻烦,通过__defineGetter__可以处理一下,就能通过Date的实例对象直接获取年月日,例如 date.year获取日期对象date的年份。月份因为与正常月份差一个月,可以通过函数自动校正一下,使用起来就更符合习惯了。很多时候我们需要显示一个日期、时间或者日期时间,就可以通过__defineGetter__处理好之后,直接返回对应的数据。
let { log } = console; Date.prototype.__defineGetter__(‘year‘, function() {return this.getFullYear();}); Date.prototype.__defineSetter__(‘year‘, function(y) {this.setFullYear(y)}); Date.prototype.__defineGetter__(‘month‘, function() {return this.getMonth() + 1;}); Date.prototype.__defineSetter__(‘month‘, function(m) {this.setMonth(m-1)}); Date.prototype.__defineGetter__(‘day‘, function() {return this.getDate();}); Date.prototype.__defineSetter__(‘day‘, function(d) {this.setDate(d)}); Date.prototype.__defineGetter__(‘hour‘, function() {return this.getHours();}); Date.prototype.__defineSetter__(‘hour‘, function(h) {this.setHours(h)}); Date.prototype.__defineGetter__(‘minute‘, function() {return this.getMinutes();}); Date.prototype.__defineSetter__(‘minute‘, function(m) {this.setMinutes(m)}); Date.prototype.__defineGetter__(‘seconds‘, function() {return this.getSeconds();}); Date.prototype.__defineSetter__(‘seconds‘, function(s) {this.setSeconds(s)}); Date.prototype.__defineGetter__("date", function (){return `${this.year}-${(this.month.dbl())}-${this.day.dbl()}`}); Date.prototype.__defineGetter__("time", function (){return `${this.hour.dbl()}:${this.minute.dbl()}:${this.seconds.dbl()}`}); Date.prototype.__defineGetter__("datetime", function (){return `${this.date} ${this.time}`}); // 将数字转换成2位的字符串,不足两位的在前面补0 Number.prototype.dbl = function (){ return String(this).padStart(2, 0); } let num = 2; log(num.dbl()); function doubleNum(n){ return String(n).padStart(2, 0); } var now = new Date; log("%O",now); // 这样打印可以看到日期的属性和方法 let { year: y, month: m, day: d } = now; log("年:%s",y) // 年:2019 log(y, m, d); // 2019 6 20 log(now.date); // 2019-06-20 log(now.time); // 10:56:53 log(now.datetime); // 2019-06-20 10:56:53
__defineGetter__和__defineSetter__在日期中的应用
原文:https://www.cnblogs.com/zhaodesheng/p/11057708.html