import { addFormatToken } from '../format/format';
|
import { addUnitAlias } from './aliases';
|
import { addRegexToken, match1to2, match2 } from '../parse/regex';
|
import { addWeekParseToken } from '../parse/token';
|
import toInt from '../utils/to-int';
|
import { createLocal } from '../create/local';
|
|
// FORMATTING
|
|
addFormatToken('w', ['ww', 2], 'wo', 'week');
|
addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
|
|
// ALIASES
|
|
addUnitAlias('week', 'w');
|
addUnitAlias('isoWeek', 'W');
|
|
// PARSING
|
|
addRegexToken('w', match1to2);
|
addRegexToken('ww', match1to2, match2);
|
addRegexToken('W', match1to2);
|
addRegexToken('WW', match1to2, match2);
|
|
addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
|
week[token.substr(0, 1)] = toInt(input);
|
});
|
|
// 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) {
|
return weekOfYear(mom, this._week.dow, this._week.doy).week;
|
}
|
|
export var defaultLocaleWeek = {
|
dow : 0, // Sunday is the first day of the week.
|
doy : 6 // The week that contains Jan 1st is the first week of the year.
|
};
|
|
export function localeFirstDayOfWeek () {
|
return this._week.dow;
|
}
|
|
export function localeFirstDayOfYear () {
|
return this._week.doy;
|
}
|
|
// MOMENTS
|
|
export function getSetWeek (input) {
|
var week = this.localeData().week(this);
|
return input == null ? week : this.add((input - week) * 7, 'd');
|
}
|
|
export function getSetISOWeek (input) {
|
var week = weekOfYear(this, 1, 4).week;
|
return input == null ? week : this.add((input - week) * 7, 'd');
|
}
|