react-trash-calendar/src/lib/calendar/dateutil.ts

54 lines
1.5 KiB
TypeScript

// https://stackoverflow.com/a/6117889
export function getWeekNumber(date: Date) {
// Copy date so don't modify original
const d = new Date(
Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())
);
// Set to nearest Thursday: current date + 4 - current day number
// Make Sunday's day number 7
d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay() || 7));
d.setMilliseconds(0);
// Get first day of year
const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
// Calculate full weeks to nearest Thursday
const weekNo = Math.ceil(
((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7
);
// Return week number
return weekNo;
}
export function getRealDay(date: Date) {
return (date.getDay() || 7) - 1;
}
export function getWeekDays(
locale = 'en-US',
format: 'long' | 'short' | 'narrow' | undefined = 'long'
) {
const baseDate = new Date(Date.UTC(2022, 0, 3));
return Array.from({ length: 7 }, () => {
const val = baseDate.toLocaleDateString(locale, { weekday: format });
baseDate.setDate(baseDate.getDate() + 1);
return val;
});
}
export function getMonthNames(
locale = 'en-US',
format:
| 'long'
| 'short'
| 'narrow'
| 'numeric'
| '2-digit'
| undefined = 'long'
) {
const baseDate = new Date(Date.UTC(2022, 0, 1));
return Array.from({ length: 12 }, () => {
const val = baseDate.toLocaleDateString(locale, { month: format });
baseDate.setMonth(baseDate.getMonth() + 1);
return val;
});
}