UNPKG

vueless

Version:

Vue Styleless UI Component Library, powered by Tailwind CSS.

276 lines (200 loc) • 7.04 kB
import { LocaleType, DAYS_IN_WEEK, SECONDS_IN_MINUTES } from "./constants"; export type dateSettings = { weekStartsOn?: number }; const daysMap = ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"]; const monthsMap = [ "january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december", ]; export function minutesToSeconds(minutes: number) { return Math.trunc(minutes * SECONDS_IN_MINUTES); } export function getDaysInMonth(date: Date) { return new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate(); } export function getWeeksInMonth(date: Date, settings: dateSettings = {}) { const { weekStartsOn = 0 } = settings; const monthIndex = date.getMonth() - 1; const firstOfMonth = new Date(date.getFullYear(), monthIndex, 1); const daysInMonth = getDaysInMonth(date); const firstWeekDay = (firstOfMonth.getDay() - weekStartsOn + DAYS_IN_WEEK) % DAYS_IN_WEEK; return Math.ceil((firstWeekDay + daysInMonth) / DAYS_IN_WEEK); } export function getEndOfYear(date: Date) { const localDate = new Date(date.valueOf()); const year = localDate.getFullYear() + 1; localDate.setFullYear(year, 0, 0); localDate.setHours(23, 59, 59, 999); return localDate; } export function getStartOfYear(date: Date) { const localDate = new Date(date.valueOf()); localDate.setFullYear(localDate.getFullYear(), 0, 1); localDate.setHours(0, 0, 0, 0); return localDate; } export function getEndOfQuarter(date: Date) { const localDate = new Date(date.valueOf()); const currentMonth = localDate.getMonth(); const month = currentMonth - (currentMonth % 3) + 3; localDate.setMonth(month, 0); localDate.setHours(23, 59, 59, 999); return localDate; } export function getStartOfQuarter(date: Date) { const localDate = new Date(date.valueOf()); const currentMonth = localDate.getMonth(); const month = currentMonth - (currentMonth % 3); localDate.setMonth(month, 1); localDate.setHours(0, 0, 0, 0); return localDate; } export function getStartOfMonth(date: Date) { const localDate = new Date(date.valueOf()); localDate.setDate(1); localDate.setHours(0, 0, 0, 0); return localDate; } export function getEndOfMonth(date: Date) { const localDate = new Date(date.valueOf()); const month = localDate.getMonth() + 1; localDate.setFullYear(localDate.getFullYear(), month, 0); localDate.setHours(23, 59, 59, 999); return localDate; } export function getEndOfWeek(date: Date, settings: dateSettings = {}) { const { weekStartsOn = 0 } = settings; const localDate = new Date(date.valueOf()); const day = localDate.getDay(); const oneDay = 1; const diff = (day < weekStartsOn ? DAYS_IN_WEEK * -1 : 0) + DAYS_IN_WEEK - oneDay - (day - weekStartsOn); localDate.setDate(localDate.getDate() + diff); localDate.setHours(23, 59, 59, 999); return localDate; } export function getStartOfWeek(date: Date, settings: dateSettings = {}) { const { weekStartsOn = 0 } = settings; const localDate = new Date(date.valueOf()); const day = localDate.getDay(); const diff = (day < weekStartsOn ? DAYS_IN_WEEK : 0) + day - weekStartsOn; localDate.setDate(localDate.getDate() - diff); localDate.setHours(0, 0, 0, 0); return localDate; } export function getEndOfDay(date: Date) { const localDate = new Date(date.valueOf()); localDate.setHours(23, 59, 59, 999); return localDate; } export function getStartOfDay(date: Date) { const localDate = new Date(date.valueOf()); localDate.setHours(0, 0, 0, 0); return localDate; } export function getSortedLocale<TLocale>(locale: TLocale, type: "month" | "day"): string[] { const targetMap = type === LocaleType.Month ? monthsMap : daysMap; if (typeof locale === "object" && !Array.isArray(locale)) { const sortedDays = Object.entries(locale as object) .map((entry) => [targetMap.indexOf(entry[0]), entry.at(1)]) .sort((entryA, entryB) => entryA[0] - entryB[0]); return sortedDays.map((entry) => entry[1]); } else { // eslint-disable-next-line no-console console.error( new TypeError(`Expected object, but got ${Array.isArray(locale) ? "array" : typeof locale}`), ); return []; } } export function getDateFromUnixTimestamp(timestamp: number) { return new Date(timestamp); } export function getUnixTimestampFromDate(date: Date) { return date.getTime(); } export function getDatesDifference(dateOne: Date, dateTwo: Date, timeless = true) { if (timeless !== false) { return ( new Date(dateOne.getTime()).setHours(0, 0, 0, 0) - new Date(dateTwo.getTime()).setHours(0, 0, 0, 0) ); } return dateOne.getTime() - dateTwo.getTime(); } export function getDateWithoutTime(date = new Date()) { date.setHours(0, 0, 0, 0); return date; } export function isSameMonth(dateOne: Date, dateTwo: Date) { return ( Boolean(dateOne) && Boolean(dateTwo) && dateOne.getFullYear() === dateTwo.getFullYear() && dateOne.getMonth() === dateTwo.getMonth() ); } export function isSameDay(dateOne: Date, dateTwo: Date) { return isSameMonth(dateOne, dateTwo) && dateOne?.getDate() === dateTwo?.getDate(); } export function isAnotherMothDay(day: Date, activeMonth: Date) { return ( activeMonth.getFullYear() !== day.getFullYear() || activeMonth.getMonth() !== day.getMonth() ); } export function addDays(date: Date, amount = 1) { const result = new Date(date); result.setDate(result.getDate() + amount); return result; } export function addWeeks(date: Date, amount = 1) { const days = amount * DAYS_IN_WEEK; return addDays(date, days); } export function addQuarters(date: Date, amount = 1) { const months = amount * 3; return addMonths(date, months); } export function addMonths(date: Date, amount = 1) { let newDate = new Date(date.valueOf()); newDate.setMonth(date.getMonth() + amount); // Means the current day has less days so the extra month is // in the following month if (newDate.getDate() !== date.getDate()) { // Assign the last day of previous month newDate = new Date(newDate.getFullYear(), newDate.getMonth(), 0); } return newDate; } export function addYears(date: Date, amount = 1) { let newDate = new Date(date.valueOf()); newDate.setFullYear(date.getFullYear() + amount); // Means the current day has less days so the extra month is // in the following month if (newDate.getDate() !== date.getDate()) { // Assign the last day of previous month newDate = new Date(newDate.getFullYear(), newDate.getMonth(), 0); } return newDate; } export function isToday(date: Date) { return isSameDay(date, new Date()); } export function isCurrentMonth(date: Date) { return isSameMonth(date, new Date()); } export function isCurrentYear(date: Date) { return date.getFullYear() === new Date().getFullYear(); } export function getLastDayOfMonth(date: Date) { return new Date(date.getFullYear(), date.getMonth() + 1, 0); }