import extend from '../utils/extend';
import { createUTC } from './utc';
import getParsingFlags from '../create/parsing-flags';
+import some from '../utils/some';
export function isValid(m) {
if (m._isValid == null) {
var flags = getParsingFlags(m);
+ var parsedParts = some.call(flags.parsedDateParts, function (i) {
+ return i != null;
+ });
m._isValid = !isNaN(m._d.getTime()) &&
flags.overflow < 0 &&
!flags.empty &&
!flags.invalidWeekday &&
!flags.nullInput &&
!flags.invalidFormat &&
- !flags.userInvalidated;
+ !flags.userInvalidated &&
+ (!flags.meridiem || (flags.meridiem && parsedParts));
if (m._strict) {
m._isValid = m._isValid &&
--- /dev/null
+var some;
+if (Array.prototype.some) {
+ some = Array.prototype.some;
+} else {
+ some = function (fun) {
+ var t = Object(this);
+ var len = t.length >>> 0;
+
+ for (var i = 0; i < len; i++) {
+ if (i in t && fun.call(this, t[i], i, t)) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+}
+
+export { some as default };
test('Y token', function (assert) {
assert.equal(moment('1-1-2010', 'M-D-Y', true).year(), 2010, 'parsing Y');
});
+
+test('parsing flags retain parsed date parts', function (assert) {
+ var a = moment('10 p', 'hh:mm a');
+ assert.equal(a.parsingFlags().parsedDateParts[3], 10, 'parsed 10 as the hour');
+ assert.equal(a.parsingFlags().parsedDateParts[0], undefined, 'year was not parsed');
+ assert.equal(a.parsingFlags().meridiem, 'p', 'meridiem flag was added');
+ var b = moment('10:30', ['MMDDYY', 'HH:mm']);
+ assert.equal(b.parsingFlags().parsedDateParts[3], 10, 'multiple format parshing matched hour');
+ assert.equal(b.parsingFlags().parsedDateParts[0], undefined, 'array is properly copied, no residual data from first token parse');
+});
+
+test('parsing only meridiem results in invalid date', function (assert) {
+ assert.ok(!moment('alkj', 'hh:mm a').isValid(), 'because an a token is used, a meridiem will be parsed but nothing else was so invalid');
+ assert.ok(moment('02:30 p more extra stuff', 'hh:mm a').isValid(), 'because other tokens were parsed, date is valid');
+ assert.ok(moment('1/1/2016 extra data', ['a', 'M/D/YYYY']).isValid(), 'took second format, does not pick up on meridiem parsed from first format (good copy)');
+});