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.
97 lines
2.5 KiB
97 lines
2.5 KiB
export default (function (o, c, dayjs) { |
|
var proto = c.prototype; |
|
|
|
var isObject = function isObject(obj) { |
|
return !(obj instanceof Date) && !(obj instanceof Array) && !proto.$utils().u(obj) && obj.constructor.name === 'Object'; |
|
}; |
|
|
|
var prettyUnit = function prettyUnit(u) { |
|
var unit = proto.$utils().p(u); |
|
return unit === 'date' ? 'day' : unit; |
|
}; |
|
|
|
var parseDate = function parseDate(cfg) { |
|
var date = cfg.date, |
|
utc = cfg.utc; |
|
var $d = {}; |
|
|
|
if (isObject(date)) { |
|
if (!Object.keys(date).length) { |
|
return new Date(); |
|
} |
|
|
|
var now = utc ? dayjs.utc() : dayjs(); |
|
Object.keys(date).forEach(function (k) { |
|
$d[prettyUnit(k)] = date[k]; |
|
}); |
|
var d = $d.day || (!$d.year && !($d.month >= 0) ? now.date() : 1); |
|
var y = $d.year || now.year(); |
|
var M = $d.month >= 0 ? $d.month : !$d.year && !$d.day ? now.month() : 0; // eslint-disable-line no-nested-ternary,max-len |
|
|
|
var h = $d.hour || 0; |
|
var m = $d.minute || 0; |
|
var s = $d.second || 0; |
|
var ms = $d.millisecond || 0; |
|
|
|
if (utc) { |
|
return new Date(Date.UTC(y, M, d, h, m, s, ms)); |
|
} |
|
|
|
return new Date(y, M, d, h, m, s, ms); |
|
} |
|
|
|
return date; |
|
}; |
|
|
|
var oldParse = proto.parse; |
|
|
|
proto.parse = function (cfg) { |
|
cfg.date = parseDate.bind(this)(cfg); |
|
oldParse.bind(this)(cfg); |
|
}; |
|
|
|
var oldSet = proto.set; |
|
var oldAdd = proto.add; |
|
var oldSubtract = proto.subtract; |
|
|
|
var callObject = function callObject(call, argument, string, offset) { |
|
if (offset === void 0) { |
|
offset = 1; |
|
} |
|
|
|
var keys = Object.keys(argument); |
|
var chain = this; |
|
keys.forEach(function (key) { |
|
chain = call.bind(chain)(argument[key] * offset, key); |
|
}); |
|
return chain; |
|
}; |
|
|
|
proto.set = function (unit, value) { |
|
value = value === undefined ? unit : value; |
|
|
|
if (unit.constructor.name === 'Object') { |
|
return callObject.bind(this)(function (i, s) { |
|
return oldSet.bind(this)(s, i); |
|
}, value, unit); |
|
} |
|
|
|
return oldSet.bind(this)(unit, value); |
|
}; |
|
|
|
proto.add = function (value, unit) { |
|
if (value.constructor.name === 'Object') { |
|
return callObject.bind(this)(oldAdd, value, unit); |
|
} |
|
|
|
return oldAdd.bind(this)(value, unit); |
|
}; |
|
|
|
proto.subtract = function (value, unit) { |
|
if (value.constructor.name === 'Object') { |
|
return callObject.bind(this)(oldAdd, value, unit, -1); |
|
} |
|
|
|
return oldSubtract.bind(this)(value, unit); |
|
}; |
|
}); |