forked from daren.hsu/line_push
66 lines
2.1 KiB
JavaScript
66 lines
2.1 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.weekNumber = weekNumber;
|
|
exports.isLeapYear = isLeapYear;
|
|
|
|
function createUTCDate(year) {
|
|
var month = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
var day = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
var date;
|
|
|
|
if (year < 100 && year >= 0) {
|
|
date = new Date(Date.UTC(year, month, day));
|
|
|
|
if (isFinite(date.getUTCFullYear())) {
|
|
date.setUTCFullYear(year);
|
|
}
|
|
} else {
|
|
date = new Date(Date.UTC(year, month, day));
|
|
}
|
|
|
|
return date;
|
|
}
|
|
|
|
function firstWeekOffset(year, firstDayOfWeek, firstDayOfYear) {
|
|
var firstWeekDayInFirstWeek = 7 + firstDayOfWeek - firstDayOfYear;
|
|
var firstWeekDayOfYear = (7 + createUTCDate(year, 0, firstWeekDayInFirstWeek).getUTCDay() - firstDayOfWeek) % 7;
|
|
return -firstWeekDayOfYear + firstWeekDayInFirstWeek - 1;
|
|
}
|
|
|
|
function dayOfYear(year, month, day, firstDayOfWeek) {
|
|
var dayOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334][month];
|
|
|
|
if (month > 1 && isLeapYear(year)) {
|
|
dayOfYear++;
|
|
}
|
|
|
|
return dayOfYear + day;
|
|
}
|
|
|
|
function weeksInYear(year, firstDayOfWeek, firstDayOfYear) {
|
|
var weekOffset = firstWeekOffset(year, firstDayOfWeek, firstDayOfYear);
|
|
var weekOffsetNext = firstWeekOffset(year + 1, firstDayOfWeek, firstDayOfYear);
|
|
var daysInYear = isLeapYear(year) ? 366 : 365;
|
|
return (daysInYear - weekOffset + weekOffsetNext) / 7;
|
|
}
|
|
|
|
function weekNumber(year, month, day, firstDayOfWeek, localeFirstDayOfYear) {
|
|
var weekOffset = firstWeekOffset(year, firstDayOfWeek, localeFirstDayOfYear);
|
|
var week = Math.ceil((dayOfYear(year, month, day, firstDayOfWeek) - weekOffset) / 7);
|
|
|
|
if (week < 1) {
|
|
return week + weeksInYear(year - 1, firstDayOfWeek, localeFirstDayOfYear);
|
|
} else if (week > weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear)) {
|
|
return week - weeksInYear(year, firstDayOfWeek, localeFirstDayOfYear);
|
|
} else {
|
|
return week;
|
|
}
|
|
}
|
|
|
|
function isLeapYear(year) {
|
|
return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
|
|
}
|
|
//# sourceMappingURL=dateTimeUtils.js.map
|