118ebb4e57f62841cabe521f65ab9e43e71666bb2e4856620e35468211a9666c3564ee118e2e3ca896951c1f3c60a748cd7cbade66824675fe9140c3e8b6c7 3.1 KB

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