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