quanyawei
2023-10-20 e5f4a463ed9a9af66035f72da8e8aef54a07baad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
export default (function (o, c, dayjs) {
  var proto = c.prototype;
 
  var isObject = function isObject(obj) {
    return obj !== null && !(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);
  };
});