You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					188 lines
				
				4.2 KiB
			
		
		
			
		
	
	
					188 lines
				
				4.2 KiB
			| 
											2 years ago
										 | import { MILLISECONDS_A_MINUTE, MIN } from '../../constant'; | ||
|  | var REGEX_VALID_OFFSET_FORMAT = /[+-]\d\d(?::?\d\d)?/g; | ||
|  | var REGEX_OFFSET_HOURS_MINUTES_FORMAT = /([+-]|\d\d)/g; | ||
|  | 
 | ||
|  | function offsetFromString(value) { | ||
|  |   if (value === void 0) { | ||
|  |     value = ''; | ||
|  |   } | ||
|  | 
 | ||
|  |   var offset = value.match(REGEX_VALID_OFFSET_FORMAT); | ||
|  | 
 | ||
|  |   if (!offset) { | ||
|  |     return null; | ||
|  |   } | ||
|  | 
 | ||
|  |   var _ref = ("" + offset[0]).match(REGEX_OFFSET_HOURS_MINUTES_FORMAT) || ['-', 0, 0], | ||
|  |       indicator = _ref[0], | ||
|  |       hoursOffset = _ref[1], | ||
|  |       minutesOffset = _ref[2]; | ||
|  | 
 | ||
|  |   var totalOffsetInMinutes = +hoursOffset * 60 + +minutesOffset; | ||
|  | 
 | ||
|  |   if (totalOffsetInMinutes === 0) { | ||
|  |     return 0; | ||
|  |   } | ||
|  | 
 | ||
|  |   return indicator === '+' ? totalOffsetInMinutes : -totalOffsetInMinutes; | ||
|  | } | ||
|  | 
 | ||
|  | export default (function (option, Dayjs, dayjs) { | ||
|  |   var proto = Dayjs.prototype; | ||
|  | 
 | ||
|  |   dayjs.utc = function (date) { | ||
|  |     var cfg = { | ||
|  |       date: date, | ||
|  |       utc: true, | ||
|  |       args: arguments | ||
|  |     }; // eslint-disable-line prefer-rest-params
 | ||
|  | 
 | ||
|  |     return new Dayjs(cfg); // eslint-disable-line no-use-before-define
 | ||
|  |   }; | ||
|  | 
 | ||
|  |   proto.utc = function (keepLocalTime) { | ||
|  |     var ins = dayjs(this.toDate(), { | ||
|  |       locale: this.$L, | ||
|  |       utc: true | ||
|  |     }); | ||
|  | 
 | ||
|  |     if (keepLocalTime) { | ||
|  |       return ins.add(this.utcOffset(), MIN); | ||
|  |     } | ||
|  | 
 | ||
|  |     return ins; | ||
|  |   }; | ||
|  | 
 | ||
|  |   proto.local = function () { | ||
|  |     return dayjs(this.toDate(), { | ||
|  |       locale: this.$L, | ||
|  |       utc: false | ||
|  |     }); | ||
|  |   }; | ||
|  | 
 | ||
|  |   var oldParse = proto.parse; | ||
|  | 
 | ||
|  |   proto.parse = function (cfg) { | ||
|  |     if (cfg.utc) { | ||
|  |       this.$u = true; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (!this.$utils().u(cfg.$offset)) { | ||
|  |       this.$offset = cfg.$offset; | ||
|  |     } | ||
|  | 
 | ||
|  |     oldParse.call(this, cfg); | ||
|  |   }; | ||
|  | 
 | ||
|  |   var oldInit = proto.init; | ||
|  | 
 | ||
|  |   proto.init = function () { | ||
|  |     if (this.$u) { | ||
|  |       var $d = this.$d; | ||
|  |       this.$y = $d.getUTCFullYear(); | ||
|  |       this.$M = $d.getUTCMonth(); | ||
|  |       this.$D = $d.getUTCDate(); | ||
|  |       this.$W = $d.getUTCDay(); | ||
|  |       this.$H = $d.getUTCHours(); | ||
|  |       this.$m = $d.getUTCMinutes(); | ||
|  |       this.$s = $d.getUTCSeconds(); | ||
|  |       this.$ms = $d.getUTCMilliseconds(); | ||
|  |     } else { | ||
|  |       oldInit.call(this); | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  |   var oldUtcOffset = proto.utcOffset; | ||
|  | 
 | ||
|  |   proto.utcOffset = function (input, keepLocalTime) { | ||
|  |     var _this$$utils = this.$utils(), | ||
|  |         u = _this$$utils.u; | ||
|  | 
 | ||
|  |     if (u(input)) { | ||
|  |       if (this.$u) { | ||
|  |         return 0; | ||
|  |       } | ||
|  | 
 | ||
|  |       if (!u(this.$offset)) { | ||
|  |         return this.$offset; | ||
|  |       } | ||
|  | 
 | ||
|  |       return oldUtcOffset.call(this); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (typeof input === 'string') { | ||
|  |       input = offsetFromString(input); | ||
|  | 
 | ||
|  |       if (input === null) { | ||
|  |         return this; | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     var offset = Math.abs(input) <= 16 ? input * 60 : input; | ||
|  |     var ins = this; | ||
|  | 
 | ||
|  |     if (keepLocalTime) { | ||
|  |       ins.$offset = offset; | ||
|  |       ins.$u = input === 0; | ||
|  |       return ins; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (input !== 0) { | ||
|  |       var localTimezoneOffset = this.$u ? this.toDate().getTimezoneOffset() : -1 * this.utcOffset(); | ||
|  |       ins = this.local().add(offset + localTimezoneOffset, MIN); | ||
|  |       ins.$offset = offset; | ||
|  |       ins.$x.$localOffset = localTimezoneOffset; | ||
|  |     } else { | ||
|  |       ins = this.utc(); | ||
|  |     } | ||
|  | 
 | ||
|  |     return ins; | ||
|  |   }; | ||
|  | 
 | ||
|  |   var oldFormat = proto.format; | ||
|  |   var UTC_FORMAT_DEFAULT = 'YYYY-MM-DDTHH:mm:ss[Z]'; | ||
|  | 
 | ||
|  |   proto.format = function (formatStr) { | ||
|  |     var str = formatStr || (this.$u ? UTC_FORMAT_DEFAULT : ''); | ||
|  |     return oldFormat.call(this, str); | ||
|  |   }; | ||
|  | 
 | ||
|  |   proto.valueOf = function () { | ||
|  |     var addedOffset = !this.$utils().u(this.$offset) ? this.$offset + (this.$x.$localOffset || this.$d.getTimezoneOffset()) : 0; | ||
|  |     return this.$d.valueOf() - addedOffset * MILLISECONDS_A_MINUTE; | ||
|  |   }; | ||
|  | 
 | ||
|  |   proto.isUTC = function () { | ||
|  |     return !!this.$u; | ||
|  |   }; | ||
|  | 
 | ||
|  |   proto.toISOString = function () { | ||
|  |     return this.toDate().toISOString(); | ||
|  |   }; | ||
|  | 
 | ||
|  |   proto.toString = function () { | ||
|  |     return this.toDate().toUTCString(); | ||
|  |   }; | ||
|  | 
 | ||
|  |   var oldToDate = proto.toDate; | ||
|  | 
 | ||
|  |   proto.toDate = function (type) { | ||
|  |     if (type === 's' && this.$offset) { | ||
|  |       return dayjs(this.format('YYYY-MM-DD HH:mm:ss:SSS')).toDate(); | ||
|  |     } | ||
|  | 
 | ||
|  |     return oldToDate.call(this); | ||
|  |   }; | ||
|  | 
 | ||
|  |   var oldDiff = proto.diff; | ||
|  | 
 | ||
|  |   proto.diff = function (input, units, _float) { | ||
|  |     if (input && this.$u === input.$u) { | ||
|  |       return oldDiff.call(this, input, units, _float); | ||
|  |     } | ||
|  | 
 | ||
|  |     var localThis = this.local(); | ||
|  |     var localInput = dayjs(input).local(); | ||
|  |     return oldDiff.call(localThis, localInput, units, _float); | ||
|  |   }; | ||
|  | }); |