54 lines
1.5 KiB
TypeScript
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;
|
|
});
|
|
}
|