line_push/node_modules/vuetify/lib/util/dateTimeUtils.js
2022-07-17 13:16:16 +08:00

55 lines
1.8 KiB
JavaScript

function createUTCDate(year, month = 0, day = 1) {
let 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) {
const firstWeekDayInFirstWeek = 7 + firstDayOfWeek - firstDayOfYear;
const firstWeekDayOfYear = (7 + createUTCDate(year, 0, firstWeekDayInFirstWeek).getUTCDay() - firstDayOfWeek) % 7;
return -firstWeekDayOfYear + firstWeekDayInFirstWeek - 1;
}
function dayOfYear(year, month, day, firstDayOfWeek) {
let 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) {
const weekOffset = firstWeekOffset(year, firstDayOfWeek, firstDayOfYear);
const weekOffsetNext = firstWeekOffset(year + 1, firstDayOfWeek, firstDayOfYear);
const daysInYear = isLeapYear(year) ? 366 : 365;
return (daysInYear - weekOffset + weekOffsetNext) / 7;
}
export function weekNumber(year, month, day, firstDayOfWeek, localeFirstDayOfYear) {
const weekOffset = firstWeekOffset(year, firstDayOfWeek, localeFirstDayOfYear);
const 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;
}
}
export function isLeapYear(year) {
return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
}
//# sourceMappingURL=dateTimeUtils.js.map