index.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. export default (function (o, c, dayjs) {
  2. var proto = c.prototype;
  3. var isObject = function isObject(obj) {
  4. return !(obj instanceof Date) && !(obj instanceof Array) && obj instanceof Object;
  5. };
  6. var prettyUnit = function prettyUnit(u) {
  7. var unit = proto.$utils().p(u);
  8. return unit === 'date' ? 'day' : unit;
  9. };
  10. var parseDate = function parseDate(cfg) {
  11. var date = cfg.date,
  12. utc = cfg.utc;
  13. var $d = {};
  14. if (isObject(date)) {
  15. if (!Object.keys(date).length) {
  16. return new Date();
  17. }
  18. var now = utc ? dayjs.utc() : dayjs();
  19. Object.keys(date).forEach(function (k) {
  20. $d[prettyUnit(k)] = date[k];
  21. });
  22. var d = $d.day || (!$d.year && !($d.month >= 0) ? now.date() : 1);
  23. var y = $d.year || now.year();
  24. var M = $d.month >= 0 ? $d.month : !$d.year && !$d.day ? now.month() : 0; // eslint-disable-line no-nested-ternary,max-len
  25. var h = $d.hour || 0;
  26. var m = $d.minute || 0;
  27. var s = $d.second || 0;
  28. var ms = $d.millisecond || 0;
  29. if (utc) {
  30. return new Date(Date.UTC(y, M, d, h, m, s, ms));
  31. }
  32. return new Date(y, M, d, h, m, s, ms);
  33. }
  34. return date;
  35. };
  36. var oldParse = proto.parse;
  37. proto.parse = function (cfg) {
  38. cfg.date = parseDate.bind(this)(cfg);
  39. oldParse.bind(this)(cfg);
  40. };
  41. var oldSet = proto.set;
  42. var oldAdd = proto.add;
  43. var callObject = function callObject(call, argument, string, offset) {
  44. if (offset === void 0) {
  45. offset = 1;
  46. }
  47. if (argument instanceof Object) {
  48. var keys = Object.keys(argument);
  49. var chain = this;
  50. keys.forEach(function (key) {
  51. chain = call.bind(chain)(argument[key] * offset, key);
  52. });
  53. return chain;
  54. }
  55. return call.bind(this)(argument * offset, string);
  56. };
  57. proto.set = function (string, _int) {
  58. _int = _int === undefined ? string : _int;
  59. return callObject.bind(this)(function (i, s) {
  60. return oldSet.bind(this)(s, i);
  61. }, _int, string);
  62. };
  63. proto.add = function (number, string) {
  64. return callObject.bind(this)(oldAdd, number, string);
  65. };
  66. proto.subtract = function (number, string) {
  67. return callObject.bind(this)(oldAdd, number, string, -1);
  68. };
  69. });