import { daysInMonth } from '../units/month';
-import { YEAR, MONTH, DATE, HOUR, MINUTE, SECOND, MILLISECOND } from '../units/constants';
+import { YEAR, MONTH, DATE, HOUR, MINUTE, SECOND, MILLISECOND, WEEK } from '../units/constants';
import getParsingFlags from '../create/parsing-flags';
export default function checkOverflow (m) {
if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
overflow = DATE;
}
+ if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
+ overflow = WEEK;
+ }
getParsingFlags(m).overflow = overflow;
}
import { createDate, createUTCDate } from './date-from-array';
import { daysInYear } from '../units/year';
import { weekOfYear } from '../units/week';
+import { weeksInYear } from '../units/week-year';
import { dayOfYearFromWeeks } from '../units/day-of-year';
import { YEAR, MONTH, DATE, HOUR, MINUTE, SECOND, MILLISECOND } from '../units/constants';
import { createLocal } from './local';
weekday = dow;
}
}
- temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow);
-
- config._a[YEAR] = temp.year;
- config._dayOfYear = temp.dayOfYear;
+ if (1 <= week && week <= weeksInYear(weekYear, dow, doy)) {
+ temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow);
+ config._a[YEAR] = temp.year;
+ config._dayOfYear = temp.dayOfYear;
+ } else {
+ getParsingFlags(config)._overflowWeeks = true;
+ }
}
export var MINUTE = 4;
export var SECOND = 5;
export var MILLISECOND = 6;
+export var WEEK = 7;
// HELPERS
-function weeksInYear(year, dow, doy) {
+export function weeksInYear(year, dow, doy) {
return weekOfYear(createLocal([year, 11, 31 + dow - doy]), dow, doy).week;
}
assert.equal('2005-01-01', moment.utc('2004-W53-6', moment.ISO_8601, true).format('YYYY-MM-DD'), '2004-W53-6 is 1st Jan 2005');
assert.equal('2007-12-31', moment.utc('2008-W01-1', moment.ISO_8601, true).format('YYYY-MM-DD'), '2008-W01-1 is 31st Dec 2007');
});
+
+test('weeks overflow', function (assert) {
+ assert.equal(7, moment.utc('2004-W54-1', moment.ISO_8601, true).parsingFlags().overflow, '2004 has only 53 weeks');
+ assert.equal(7, moment.utc('2004-W00-1', moment.ISO_8601, true).parsingFlags().overflow, 'there is no 0th week');
+});