index.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. export default (function (o, c) {
  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. Object.keys(date).forEach(function (k) {
  16. $d[prettyUnit(k)] = date[k];
  17. });
  18. var y = $d.year || 1970;
  19. var M = $d.month - 1 || 0;
  20. var d = $d.day || 1;
  21. var h = $d.hour || 0;
  22. var m = $d.minute || 0;
  23. var s = $d.second || 0;
  24. var ms = $d.millisecond || 0;
  25. if (utc) {
  26. return new Date(Date.UTC(y, M, d, h, m, s, ms));
  27. }
  28. return new Date(y, M, d, h, m, s, ms);
  29. }
  30. return date;
  31. };
  32. var oldParse = proto.parse;
  33. proto.parse = function (cfg) {
  34. cfg.date = parseDate.bind(this)(cfg);
  35. oldParse.bind(this)(cfg);
  36. };
  37. var oldSet = proto.set;
  38. var oldAdd = proto.add;
  39. var callObject = function callObject(call, argument, string, offset) {
  40. if (offset === void 0) {
  41. offset = 1;
  42. }
  43. if (argument instanceof Object) {
  44. var keys = Object.keys(argument);
  45. var chain = this;
  46. keys.forEach(function (key) {
  47. chain = call.bind(chain)(argument[key] * offset, key);
  48. });
  49. return chain;
  50. }
  51. return call.bind(this)(argument * offset, string);
  52. };
  53. proto.set = function (string, _int) {
  54. _int = _int === undefined ? string : _int;
  55. return callObject.bind(this)(function (i, s) {
  56. return oldSet.bind(this)(s, i);
  57. }, _int, string);
  58. };
  59. proto.add = function (number, string) {
  60. return callObject.bind(this)(oldAdd, number, string);
  61. };
  62. proto.subtract = function (number, string) {
  63. return callObject.bind(this)(oldAdd, number, string, -1);
  64. };
  65. });