UNPKG

vuetify

Version:

Vue Material Component Framework

389 lines (387 loc) 7.7 kB
// Utilities import { createRange } from "../../../util/index.mjs"; // Types const firstDay = { '001': 1, AD: 1, AE: 6, AF: 6, AG: 0, AI: 1, AL: 1, AM: 1, AN: 1, AR: 1, AS: 0, AT: 1, AU: 1, AX: 1, AZ: 1, BA: 1, BD: 0, BE: 1, BG: 1, BH: 6, BM: 1, BN: 1, BR: 0, BS: 0, BT: 0, BW: 0, BY: 1, BZ: 0, CA: 0, CH: 1, CL: 1, CM: 1, CN: 1, CO: 0, CR: 1, CY: 1, CZ: 1, DE: 1, DJ: 6, DK: 1, DM: 0, DO: 0, DZ: 6, EC: 1, EE: 1, EG: 6, ES: 1, ET: 0, FI: 1, FJ: 1, FO: 1, FR: 1, GB: 1, 'GB-alt-variant': 0, GE: 1, GF: 1, GP: 1, GR: 1, GT: 0, GU: 0, HK: 0, HN: 0, HR: 1, HU: 1, ID: 0, IE: 1, IL: 0, IN: 0, IQ: 6, IR: 6, IS: 1, IT: 1, JM: 0, JO: 6, JP: 0, KE: 0, KG: 1, KH: 0, KR: 0, KW: 6, KZ: 1, LA: 0, LB: 1, LI: 1, LK: 1, LT: 1, LU: 1, LV: 1, LY: 6, MC: 1, MD: 1, ME: 1, MH: 0, MK: 1, MM: 0, MN: 1, MO: 0, MQ: 1, MT: 0, MV: 5, MX: 0, MY: 1, MZ: 0, NI: 0, NL: 1, NO: 1, NP: 0, NZ: 1, OM: 6, PA: 0, PE: 0, PH: 0, PK: 0, PL: 1, PR: 0, PT: 0, PY: 0, QA: 6, RE: 1, RO: 1, RS: 1, RU: 1, SA: 0, SD: 6, SE: 1, SG: 0, SI: 1, SK: 1, SM: 1, SV: 0, SY: 6, TH: 0, TJ: 1, TM: 1, TR: 1, TT: 0, TW: 0, UA: 1, UM: 0, US: 0, UY: 1, UZ: 1, VA: 1, VE: 0, VI: 0, VN: 1, WS: 0, XK: 1, YE: 0, ZA: 0, ZW: 0 }; function getWeekArray(date, locale) { const weeks = []; let currentWeek = []; const firstDayOfMonth = startOfMonth(date); const lastDayOfMonth = endOfMonth(date); const firstDayWeekIndex = firstDayOfMonth.getDay() - firstDay[locale.slice(-2).toUpperCase()]; const lastDayWeekIndex = lastDayOfMonth.getDay() - firstDay[locale.slice(-2).toUpperCase()]; for (let i = 0; i < firstDayWeekIndex; i++) { const adjacentDay = new Date(firstDayOfMonth); adjacentDay.setDate(adjacentDay.getDate() - (firstDayWeekIndex - i)); currentWeek.push(adjacentDay); } for (let i = 1; i <= lastDayOfMonth.getDate(); i++) { const day = new Date(date.getFullYear(), date.getMonth(), i); // Add the day to the current week currentWeek.push(day); // If the current week has 7 days, add it to the weeks array and start a new week if (currentWeek.length === 7) { weeks.push(currentWeek); currentWeek = []; } } for (let i = 1; i < 7 - lastDayWeekIndex; i++) { const adjacentDay = new Date(lastDayOfMonth); adjacentDay.setDate(adjacentDay.getDate() + i); currentWeek.push(adjacentDay); } weeks.push(currentWeek); return weeks; } function startOfMonth(date) { return new Date(date.getFullYear(), date.getMonth(), 1); } function endOfMonth(date) { return new Date(date.getFullYear(), date.getMonth() + 1, 0); } function date(value) { if (value == null) return new Date(); if (value instanceof Date) return value; if (typeof value === 'string') { const parsed = Date.parse(value); if (!isNaN(parsed)) return new Date(parsed); } return null; } const sundayJanuarySecond2000 = new Date(2000, 0, 2); function getWeekdays(locale) { const daysFromSunday = firstDay[locale.slice(-2).toUpperCase()]; return createRange(7).map(i => { const weekday = new Date(sundayJanuarySecond2000); weekday.setDate(sundayJanuarySecond2000.getDate() + daysFromSunday + i); return new Intl.DateTimeFormat(locale, { weekday: 'short' }).format(weekday); }); } function format(value, formatString, locale) { const date = new Date(value); let options = {}; switch (formatString) { case 'fullDateWithWeekday': options = { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' }; break; case 'normalDateWithWeekday': options = { weekday: 'short', day: 'numeric', month: 'short' }; break; case 'keyboardDate': options = {}; break; case 'monthAndDate': options = { month: 'long', day: 'numeric' }; break; case 'monthAndYear': options = { month: 'long', year: 'numeric' }; break; case 'dayOfMonth': options = { day: 'numeric' }; break; default: options = { timeZone: 'UTC', timeZoneName: 'short' }; } return new Intl.DateTimeFormat(locale, options).format(date); } function addDays(date, amount) { const d = new Date(date); d.setDate(d.getDate() + amount); return d; } function addMonths(date, amount) { const d = new Date(date); d.setMonth(d.getMonth() + amount); return d; } function getYear(date) { return date.getFullYear(); } function getMonth(date) { return date.getMonth(); } function startOfYear(date) { return new Date(date.getFullYear(), 0, 1); } function endOfYear(date) { return new Date(date.getFullYear(), 11, 31); } function isWithinRange(date, range) { return isAfter(date, range[0]) && isBefore(date, range[1]); } function isValid(date) { const d = new Date(date); return d instanceof Date && !isNaN(d.getTime()); } function isAfter(date, comparing) { return date.getTime() > comparing.getTime(); } function isBefore(date, comparing) { return date.getTime() < comparing.getTime(); } function isEqual(date, comparing) { return date.getTime() === comparing.getTime(); } function isSameDay(date, comparing) { return date.getDate() === comparing.getDate() && date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear(); } function isSameMonth(date, comparing) { return date.getMonth() === comparing.getMonth() && date.getFullYear() === comparing.getFullYear(); } function getDiff(date, comparing, unit) { const d = new Date(date); const c = new Date(comparing); if (unit === 'month') { return d.getMonth() - c.getMonth() + (d.getFullYear() - c.getFullYear()) * 12; } return Math.floor((d.getTime() - c.getTime()) / (1000 * 60 * 60 * 24)); } function setYear(date, year) { const d = new Date(date); d.setFullYear(year); return d; } export class VuetifyDateAdapter { constructor(options) { this.locale = options.locale; } date(value) { return date(value); } toJsDate(date) { return date; } addDays(date, amount) { return addDays(date, amount); } addMonths(date, amount) { return addMonths(date, amount); } getWeekArray(date) { return getWeekArray(date, this.locale); } startOfMonth(date) { return startOfMonth(date); } endOfMonth(date) { return endOfMonth(date); } format(date, formatString) { return format(date, formatString, this.locale); } isEqual(date, comparing) { return isEqual(date, comparing); } isValid(date) { return isValid(date); } isWithinRange(date, range) { return isWithinRange(date, range); } isAfter(date, comparing) { return isAfter(date, comparing); } isBefore(date, comparing) { return !isAfter(date, comparing) && !isEqual(date, comparing); } isSameDay(date, comparing) { return isSameDay(date, comparing); } isSameMonth(date, comparing) { return isSameMonth(date, comparing); } setYear(date, year) { return setYear(date, year); } getDiff(date, comparing, unit) { return getDiff(date, comparing, unit); } getWeekdays() { return getWeekdays(this.locale); } getYear(date) { return getYear(date); } getMonth(date) { return getMonth(date); } startOfYear(date) { return startOfYear(date); } endOfYear(date) { return endOfYear(date); } } //# sourceMappingURL=vuetify.mjs.map