e421fc2f318ebb586924e1edc02ad0a2792dfc3fe934fb202b9d6827a3e3c3733987a5569e70200f115c95208b10c16d7d179614636ec4edb0488952d0345e 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import { copyConfig } from '../moment/constructor';
  2. import { configFromStringAndFormat } from './from-string-and-format';
  3. import getParsingFlags from './parsing-flags';
  4. import { isValid } from './valid';
  5. import extend from '../utils/extend';
  6. // date from string and array of format strings
  7. export function configFromStringAndArray(config) {
  8. var tempConfig,
  9. bestMoment,
  10. scoreToBeat,
  11. i,
  12. currentScore;
  13. if (config._f.length === 0) {
  14. getParsingFlags(config).invalidFormat = true;
  15. config._d = new Date(NaN);
  16. return;
  17. }
  18. for (i = 0; i < config._f.length; i++) {
  19. currentScore = 0;
  20. tempConfig = copyConfig({}, config);
  21. if (config._useUTC != null) {
  22. tempConfig._useUTC = config._useUTC;
  23. }
  24. tempConfig._f = config._f[i];
  25. configFromStringAndFormat(tempConfig);
  26. if (!isValid(tempConfig)) {
  27. continue;
  28. }
  29. // if there is any input that was not parsed add a penalty for that format
  30. currentScore += getParsingFlags(tempConfig).charsLeftOver;
  31. //or tokens
  32. currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
  33. getParsingFlags(tempConfig).score = currentScore;
  34. if (scoreToBeat == null || currentScore < scoreToBeat) {
  35. scoreToBeat = currentScore;
  36. bestMoment = tempConfig;
  37. }
  38. }
  39. extend(config, bestMoment || tempConfig);
  40. }