From: Iskren Chernev Date: Thu, 29 Oct 2015 07:26:21 +0000 (-0700) Subject: Collect week-calendar utility functions in src/lib/units/week-calendar-utils X-Git-Tag: 2.11.0~65^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=181fd626ff193bc277f4ae72024292e0b56ac063;p=thirdparty%2Fmoment.git Collect week-calendar utility functions in src/lib/units/week-calendar-utils --- diff --git a/src/lib/create/from-array.js b/src/lib/create/from-array.js index 67d0bed99..8df7a16ec 100644 --- a/src/lib/create/from-array.js +++ b/src/lib/create/from-array.js @@ -1,8 +1,6 @@ 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 { weekOfYear, weeksInYear, dayOfYearFromWeeks } from '../units/week-calendar-utils'; import { YEAR, MONTH, DATE, HOUR, MINUTE, SECOND, MILLISECOND } from '../units/constants'; import { createLocal } from './local'; import defaults from '../utils/defaults'; diff --git a/src/lib/units/day-of-year.js b/src/lib/units/day-of-year.js index fcd1ee003..62d4de8b4 100644 --- a/src/lib/units/day-of-year.js +++ b/src/lib/units/day-of-year.js @@ -24,34 +24,6 @@ addParseToken(['DDD', 'DDDD'], function (input, array, config) { // HELPERS -//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; - - if (dayOfYear <= 0) { - resYear = year - 1; - resDayOfYear = daysInYear(resYear) + dayOfYear; - } else if (dayOfYear > daysInYear(year)) { - resYear = year + 1; - resDayOfYear = dayOfYear - daysInYear(year); - } else { - resYear = year; - resDayOfYear = dayOfYear; - } - - return { - year: resYear, - dayOfYear: resDayOfYear - }; -} - // MOMENTS export function getSetDayOfYear (input) { diff --git a/src/lib/units/week-calendar-utils.js b/src/lib/units/week-calendar-utils.js new file mode 100644 index 000000000..229b35e3d --- /dev/null +++ b/src/lib/units/week-calendar-utils.js @@ -0,0 +1,66 @@ +import { daysInYear } from './year'; +import { createLocal } from '../create/local'; +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; + + if (dayOfYear <= 0) { + resYear = year - 1; + resDayOfYear = daysInYear(resYear) + dayOfYear; + } else if (dayOfYear > daysInYear(year)) { + resYear = year + 1; + resDayOfYear = dayOfYear - daysInYear(year); + } else { + resYear = year; + resDayOfYear = dayOfYear; + } + + return { + year: resYear, + dayOfYear: resDayOfYear + }; +} + +// firstDayOfWeek 0 = sun, 6 = sat +// the day of the week that starts the week +// (usually sunday or monday) +// firstDayOfWeekOfYear 0 = sun, 6 = sat +// the first week is the week that contains the first +// of this day of the week +// (eg. ISO weeks use thursday (4)) +export function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { + var end = firstDayOfWeekOfYear - firstDayOfWeek, + daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), + adjustedMoment; + + + if (daysToDayOfWeek > end) { + daysToDayOfWeek -= 7; + } + + if (daysToDayOfWeek < end - 7) { + daysToDayOfWeek += 7; + } + + adjustedMoment = createLocal(mom).add(daysToDayOfWeek, 'd'); + return { + week: Math.ceil(adjustedMoment.dayOfYear() / 7), + year: adjustedMoment.year() + }; +} + +// HELPERS + +export function weeksInYear(year, dow, doy) { + return weekOfYear(createLocal([year, 11, 31 + dow - doy]), dow, doy).week; +} + diff --git a/src/lib/units/week-year.js b/src/lib/units/week-year.js index c9a974c33..fe64b17da 100644 --- a/src/lib/units/week-year.js +++ b/src/lib/units/week-year.js @@ -2,11 +2,10 @@ import { addFormatToken } from '../format/format'; import { addUnitAlias } from './aliases'; import { addRegexToken, match1to2, match1to4, match1to6, match2, match4, match6, matchSigned } from '../parse/regex'; import { addWeekParseToken } from '../parse/token'; -import { weekOfYear } from './week'; +import { weekOfYear, weeksInYear, dayOfYearFromWeeks } from './week-calendar-utils'; import toInt from '../utils/to-int'; import { hooks } from '../utils/hooks'; import { createLocal } from '../create/local'; -import { dayOfYearFromWeeks } from './day-of-year'; import { createUTCDate } from '../create/date-from-array'; // FORMATTING @@ -52,12 +51,6 @@ addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { week[token] = hooks.parseTwoDigitYear(input); }); -// HELPERS - -export function weeksInYear(year, dow, doy) { - return weekOfYear(createLocal([year, 11, 31 + dow - doy]), dow, doy).week; -} - // MOMENTS export function getSetWeekYear (input) { diff --git a/src/lib/units/week.js b/src/lib/units/week.js index 178f6b551..7ea3201ed 100644 --- a/src/lib/units/week.js +++ b/src/lib/units/week.js @@ -4,6 +4,7 @@ import { addRegexToken, match1to2, match2 } from '../parse/regex'; import { addWeekParseToken } from '../parse/token'; import toInt from '../utils/to-int'; import { createLocal } from '../create/local'; +import { weekOfYear } from './week-calendar-utils'; // FORMATTING @@ -28,34 +29,6 @@ addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) // HELPERS -// firstDayOfWeek 0 = sun, 6 = sat -// the day of the week that starts the week -// (usually sunday or monday) -// firstDayOfWeekOfYear 0 = sun, 6 = sat -// the first week is the week that contains the first -// of this day of the week -// (eg. ISO weeks use thursday (4)) -export function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { - var end = firstDayOfWeekOfYear - firstDayOfWeek, - daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), - adjustedMoment; - - - if (daysToDayOfWeek > end) { - daysToDayOfWeek -= 7; - } - - if (daysToDayOfWeek < end - 7) { - daysToDayOfWeek += 7; - } - - adjustedMoment = createLocal(mom).add(daysToDayOfWeek, 'd'); - return { - week: Math.ceil(adjustedMoment.dayOfYear() / 7), - year: adjustedMoment.year() - }; -} - // LOCALES export function localeWeek (mom) {