8ff292e579bac1b3aa6d86761c3cea5177eca11a6154d040cbfbf5003f108919569af200abd807cf560f2f4b14b542f36a2a86b6569ddf1c283a827036464a 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import isArray from '../utils/is-array';
  2. import isObject from '../utils/is-object';
  3. import isObjectEmpty from '../utils/is-object-empty';
  4. import isUndefined from '../utils/is-undefined';
  5. import isNumber from '../utils/is-number';
  6. import isDate from '../utils/is-date';
  7. import map from '../utils/map';
  8. import { createInvalid } from './valid';
  9. import { Moment, isMoment } from '../moment/constructor';
  10. import { getLocale } from '../locale/locales';
  11. import { hooks } from '../utils/hooks';
  12. import checkOverflow from './check-overflow';
  13. import { isValid } from './valid';
  14. import { configFromStringAndArray } from './from-string-and-array';
  15. import { configFromStringAndFormat } from './from-string-and-format';
  16. import { configFromString } from './from-string';
  17. import { configFromArray } from './from-array';
  18. import { configFromObject } from './from-object';
  19. function createFromConfig(config) {
  20. var res = new Moment(checkOverflow(prepareConfig(config)));
  21. if (res._nextDay) {
  22. // Adding is smart enough around DST
  23. res.add(1, 'd');
  24. res._nextDay = undefined;
  25. }
  26. return res;
  27. }
  28. export function prepareConfig(config) {
  29. var input = config._i,
  30. format = config._f;
  31. config._locale = config._locale || getLocale(config._l);
  32. if (input === null || (format === undefined && input === '')) {
  33. return createInvalid({ nullInput: true });
  34. }
  35. if (typeof input === 'string') {
  36. config._i = input = config._locale.preparse(input);
  37. }
  38. if (isMoment(input)) {
  39. return new Moment(checkOverflow(input));
  40. } else if (isDate(input)) {
  41. config._d = input;
  42. } else if (isArray(format)) {
  43. configFromStringAndArray(config);
  44. } else if (format) {
  45. configFromStringAndFormat(config);
  46. } else {
  47. configFromInput(config);
  48. }
  49. if (!isValid(config)) {
  50. config._d = null;
  51. }
  52. return config;
  53. }
  54. function configFromInput(config) {
  55. var input = config._i;
  56. if (isUndefined(input)) {
  57. config._d = new Date(hooks.now());
  58. } else if (isDate(input)) {
  59. config._d = new Date(input.valueOf());
  60. } else if (typeof input === 'string') {
  61. configFromString(config);
  62. } else if (isArray(input)) {
  63. config._a = map(input.slice(0), function (obj) {
  64. return parseInt(obj, 10);
  65. });
  66. configFromArray(config);
  67. } else if (isObject(input)) {
  68. configFromObject(config);
  69. } else if (isNumber(input)) {
  70. // from milliseconds
  71. config._d = new Date(input);
  72. } else {
  73. hooks.createFromInputFallback(config);
  74. }
  75. }
  76. export function createLocalOrUTC(input, format, locale, strict, isUTC) {
  77. var c = {};
  78. if (format === true || format === false) {
  79. strict = format;
  80. format = undefined;
  81. }
  82. if (locale === true || locale === false) {
  83. strict = locale;
  84. locale = undefined;
  85. }
  86. if (
  87. (isObject(input) && isObjectEmpty(input)) ||
  88. (isArray(input) && input.length === 0)
  89. ) {
  90. input = undefined;
  91. }
  92. // object construction must be done this way.
  93. // https://github.com/moment/moment/issues/1423
  94. c._isAMomentObject = true;
  95. c._useUTC = c._isUTC = isUTC;
  96. c._l = locale;
  97. c._i = input;
  98. c._f = format;
  99. c._strict = strict;
  100. return createFromConfig(c);
  101. }