]> git.ipfire.org Git - thirdparty/moment.git/commitdiff
Refactor dayOfYearFromWeeks so it makes more sense
authorIskren Chernev <iskren.chernev@gmail.com>
Thu, 29 Oct 2015 08:27:15 +0000 (01:27 -0700)
committerIskren Chernev <iskren.chernev@gmail.com>
Mon, 9 Nov 2015 02:53:13 +0000 (18:53 -0800)
src/lib/create/from-array.js
src/lib/units/week-calendar-utils.js

index 8df7a16ec7518d6a7ed563f3899141d53abfc236..308a9db188e3f8b45f659ff1c7f3722e63bce524 100644 (file)
@@ -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;
             }
index 229b35e3d18ba967035f1945be39a81951edaaa4..60a7bfafafe268a1cb8f6f673c216e364e974a14 100644 (file)
@@ -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;