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
			| 
								 
											3 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);
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								});
							 |