1ea4c93d7f791700474cb1a92da802a432282b90e0237408e4eff12ed7d40d4aa6014e720f07deb3888e26afebce3b6cb8f58e9db2e1954f9a2af95eeaf8cf 2.9 KB

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