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.
116 lines
2.5 KiB
116 lines
2.5 KiB
import { MILLISECONDS_A_MINUTE, MIN } from '../../constant'; |
|
export default (function (option, Dayjs, dayjs) { |
|
var localOffset = new Date().getTimezoneOffset(); |
|
var proto = Dayjs.prototype; |
|
|
|
dayjs.utc = function (date, format) { |
|
var cfg = { |
|
date: date, |
|
utc: true, |
|
format: format |
|
}; |
|
return new Dayjs(cfg); // eslint-disable-line no-use-before-define |
|
}; |
|
|
|
proto.utc = function () { |
|
return dayjs(this.toDate(), { |
|
locale: this.$L, |
|
utc: true |
|
}); |
|
}; |
|
|
|
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) { |
|
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); |
|
} |
|
|
|
var offset = Math.abs(input) <= 16 ? input * 60 : input; |
|
var ins; |
|
|
|
if (input !== 0) { |
|
ins = this.local().add(offset + localOffset, MIN); |
|
ins.$offset = offset; |
|
} 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 + localOffset : 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(); |
|
}; |
|
}); |