currentDate = currentDateArray(config);
- //compute day of the year form weeks and weekdays
+ //compute day of the year from weeks and weekdays
if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
fixYear = function (val) {
return val ?
(val.length < 3 ? (parseInt(val, 10) > 68 ? '19' + val : '20' + val) : val) :
- (config._a[YEAR] != null ? currentDate[YEAR] :
- (config._a[YEAR] == null ? moment().weekYear() : config._a[YEAR]));
+ (config._a[YEAR] == null ? moment().weekYear() : config._a[YEAR]);
};
w = config._w;
+ lang = getLangDefinition(config._l);
if (w.GG != null || w.W != null || w.E != null) {
- temp = dayOfYearFromWeeks(fixYear(w.GG), w.W, parseWeekday(w.E, config._l), 4, 1);
+ temp = dayOfYearFromWeeks(fixYear(w.GG), w.W, w.E, 4, 1);
+ }
+ else if (w.d != null) {
+ temp = dayOfYearFromWeeks(fixYear(w.gg), w.w, parseWeekday(w.d, lang), 6, 0);
}
else {
- lang = getLangDefinition(config._l);
- temp = dayOfYearFromWeeks(fixYear(w.gg), w.w, parseWeekday(w.e || w.d, lang), lang._week.doy, lang._week.dow);
+ temp = dayOfYearFromWeeks(fixYear(w.gg), w.w, w.e, lang._week.doy, lang._week.dow);
}
config._a[YEAR] = temp.year;
};
}
+ //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) {
- var d = new Date(year, 0).getUTCDay(),
+ var d = new Date(Date.UTC(year, 0)).getUTCDay(),
daysToAdd, dayOfYear;
week = week || 1;
test.equal(moment('1999 37', 'GGGG WW').format('YYYY MM DD'), "1999 09 13", 'iso week double');
//year + week + day
- test.equal(moment('1999 37 4', 'gggg ww e').format('YYYY MM DD'), "1999 09 09", 'day');
- test.equal(moment('1999 37 04', 'gggg ww e').format('YYYY MM DD'), "1999 09 09", 'day');
test.equal(moment('1999 37 4', 'GGGG WW E').format('YYYY MM DD'), "1999 09 16", 'iso day');
- test.equal(moment('1999 37 04', 'GGGG WW E').format('YYYY MM DD'), "1999 09 16", 'iso day');
+ test.equal(moment('1999 37 04', 'GGGG WW E').format('YYYY MM DD'), "1999 09 16", 'iso day wide');
+
+ test.equal(moment('1999 37 4', 'gggg ww e').format('YYYY MM DD'), "1999 09 09", 'day');
+ test.equal(moment('1999 37 04', 'gggg ww e').format('YYYY MM DD'), "1999 09 09", 'day wide');
//d
test.equal(moment('1999 37 4', 'gggg ww d').format('YYYY MM DD'), "1999 09 09", 'd');
//lower-order only
test.equal(moment('22', 'ww').week(), 22, "week sets the week by itself");
test.equal(moment('22', 'ww').year(), moment().year(), "week keeps this year");
- test.equal(moment('2013 22', 'YYYY ww').year(), 2013, "week keeps parsed year");
+ test.equal(moment('2012 22', 'YYYY ww').year(), 2012, "week keeps parsed year");
test.equal(moment('22', 'WW').isoWeek(), 22, "iso week sets the week by itself");
- test.equal(moment('2013 22', 'YYYY WW').year(), 2013, "iso week keeps parsed year");
+ test.equal(moment('2012 22', 'YYYY WW').year(), 2012, "iso week keeps parsed year");
test.equal(moment('22', 'WW').year(), moment().year(), "iso week keeps this year");
//order
test.equals(moment('1999-W37-4 3:30', 'GGGG-[W]WW-E HH:mm').format('YYYY MM DD HH:mm'), '1999 09 16 03:30', "parsing weeks and hours");
test.done();
+ },
+
+ 'parsing localized weekdays' : function (test) {
+ try {
+ moment.lang('fr');
+ test.equal(moment('1999 37 4', 'gggg ww e').format('YYYY MM DD'), "1999 09 16", 'localized e uses local doy and dow');
+ test.equal(moment('1999 37 4', 'gggg ww d').format('YYYY MM DD'), "1999 09 09", 'localized d ignores lang entirely');
+ }
+ finally {
+ moment.lang('en');
+ test.done();
+ }
}
};