1 import { daysInYear } from './year';
2 import { createLocal } from '../create/local';
3 import { createUTCDate } from '../create/date-from-array';
5 // start-of-first-week - start-of-year
6 function firstWeekOffset(year, dow, doy) {
7 var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
9 // first-week day local weekday -- which local weekday is fwd
10 fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
12 return -fwdlw + fwd - 1;
15 //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
16 export function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
17 var localWeekday = (7 + weekday - dow) % 7,
18 weekOffset = firstWeekOffset(year, dow, doy),
19 dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
20 resYear, resDayOfYear;
24 resDayOfYear = daysInYear(resYear) + dayOfYear;
25 } else if (dayOfYear > daysInYear(year)) {
27 resDayOfYear = dayOfYear - daysInYear(year);
30 resDayOfYear = dayOfYear;
35 dayOfYear: resDayOfYear
39 export function weekOfYear(mom, dow, doy) {
40 var weekOffset = firstWeekOffset(mom.year(), dow, doy),
41 week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
45 resYear = mom.year() - 1;
46 resWeek = week + weeksInYear(resYear, dow, doy);
47 } else if (week > weeksInYear(mom.year(), dow, doy)) {
48 resWeek = week - weeksInYear(mom.year(), dow, doy);
49 resYear = mom.year() + 1;
61 export function weeksInYear(year, dow, doy) {
62 var weekOffset = firstWeekOffset(year, dow, doy),
63 weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
64 return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;