From: Iskren Chernev Date: Thu, 29 Oct 2015 08:27:15 +0000 (-0700) Subject: Refactor dayOfYearFromWeeks so it makes more sense X-Git-Tag: 2.11.0~65^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d12809055e6bc3cacd47b2a536e67c7f5114040a;p=thirdparty%2Fmoment.git Refactor dayOfYearFromWeeks so it makes more sense --- diff --git a/src/lib/create/from-array.js b/src/lib/create/from-array.js index 8df7a16ec..308a9db18 100644 --- a/src/lib/create/from-array.js +++ b/src/lib/create/from-array.js @@ -108,9 +108,6 @@ function dayOfYearFromWeekInfo(config) { if (w.d != null) { // weekday -- low day numbers are considered next week weekday = w.d; - if (weekday < dow) { - ++week; - } if (weekday < 0 || weekday > 6) { weekdayOverflow = true; } diff --git a/src/lib/units/week-calendar-utils.js b/src/lib/units/week-calendar-utils.js index 229b35e3d..60a7bfafa 100644 --- a/src/lib/units/week-calendar-utils.js +++ b/src/lib/units/week-calendar-utils.js @@ -4,14 +4,16 @@ import { createUTCDate } from '../create/date-from-array'; //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday export function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { - var week1Jan = 6 + firstDayOfWeek - firstDayOfWeekOfYear, janX = createUTCDate(year, 0, 1 + week1Jan), d = janX.getUTCDay(), dayOfYear, resYear, resDayOfYear; - if (d < firstDayOfWeek) { - d += 7; - } - - weekday = weekday != null ? 1 * weekday : firstDayOfWeek; - - dayOfYear = 1 + week1Jan + 7 * (week - 1) - d + weekday; + var // first-week day -- which january is always in the first week (4 for iso, 1 for other) + fwd = 7 + firstDayOfWeek - firstDayOfWeekOfYear, + // first-week day local weekday -- which local weekday is fwd + fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - firstDayOfWeek) % 7, + // beginig of first week - begining of year + weekOffset = -fwdlw + fwd - 1, + // weekday converted to local-weekday (0 is begining of week) + localWeekday = (7 + weekday - firstDayOfWeek) % 7, + dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset, + resYear, resDayOfYear; if (dayOfYear <= 0) { resYear = year - 1;