/** * ๐Ÿ“„ Date Utility * ๋‚ ์งœ ๊ด€๋ จ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํŒŒ์ผ * * - ๋‚ ์งœ ํฌ๋งทํŒ… ๋ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ•จ์ˆ˜ * - ๋…„๋„ ๋ฐ ๋ถ„๊ธฐ ์˜ต์…˜ ์ƒ์„ฑ ๊ธฐ๋Šฅ * - ๋‚ ์งœ ๋ฌธ์ž์—ด ๋ณ€ํ™˜ ๋ฐ ํฌ๋งทํŒ… * - SelectBox ์˜ต์…˜์œผ๋กœ์˜ ๋‚ ์งœ ๋ณ€ํ™˜ * - 8์ž๋ฆฌ ๋˜๋Š” 6์ž๋ฆฌ ๋‚ ์งœ ํ˜•์‹ ์ง€์› * - Date ๊ฐ์ฒด ๊ธฐ๋ฐ˜ ๋‚ ์งœ ์กฐ์ž‘ ๋ฐ ๊ฒ€์ฆ */ export const formatDate = (date: Date): string => { if (!date) return ''; const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); // ์›”์€ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ +1 const day = String(date.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; }; // ํ˜„์žฌ ๋…„๋„๋ถ€ํ„ฐ 10๋…„ ์ „๊นŒ์ง€์˜ ๋…„๋„ ์˜ต์…˜ ์ƒ์„ฑ export const yearOptions = Array.from({ length: 10 }, (_, i) => { const year = new Date().getFullYear() - i; return { text: `${year}๋…„`, val: year.toString() }; }); // ํ˜„์žฌ ๋‚ ์งœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ˜„์žฌ ๋ถ„๊ธฐ๊นŒ์ง€์˜ ๋ถ„๊ธฐ ์˜ต์…˜ ์ƒ์„ฑ export const getQuarterOptions = (selectedYear?: string): { text: string; val: string }[] => { const currentDate = new Date(); const currentYear = currentDate.getFullYear().toString(); const currentMonth = currentDate.getMonth() + 1; // 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ +1 // ํ˜„์žฌ ๋…„๋„์ธ ๊ฒฝ์šฐ์—๋งŒ ํ˜„์žฌ ๋‚ ์งœ๊นŒ์ง€์˜ ๋ถ„๊ธฐ ํ‘œ์‹œ if (selectedYear === currentYear) { // ํ˜„์žฌ ์›”์„ ๊ธฐ์ค€์œผ๋กœ ํ˜„์žฌ ๋ถ„๊ธฐ ๊ณ„์‚ฐ const currentQuarter = Math.ceil(currentMonth / 3); // ํ˜„์žฌ ๋ถ„๊ธฐ๊นŒ์ง€์˜ ๋ถ„๊ธฐ ์˜ต์…˜ ์ƒ์„ฑ const quarterOptions = []; for (let i = 1; i <= currentQuarter; i++) { quarterOptions.push({ text: `${i}๋ถ„๊ธฐ`, val: i.toString() }); } return quarterOptions; } else { // ์ด์ „ ๋…„๋„์ธ ๊ฒฝ์šฐ ๋ชจ๋“  ๋ถ„๊ธฐ ํ‘œ์‹œ return [ { text: "1๋ถ„๊ธฐ", val: "1" }, { text: "2๋ถ„๊ธฐ", val: "2" }, { text: "3๋ถ„๊ธฐ", val: "3" }, { text: "4๋ถ„๊ธฐ", val: "4" } ]; } }; // ["202506", "202505", "202502", "202405"] ์„ SelectBox์˜ ์˜ต์…˜์œผ๋กœ ๋ณ€ํ™˜ export const convertToTextValArray = (yyyymms: string[]): { text: string; val: string }[] => { return yyyymms.map(dateStr => { const year = dateStr.slice(0, 4); const month = dateStr.slice(4, 6); return { text: `${year}-${month}`, val: dateStr }; }); }; // ๐ŸŽฏ ๋‚ ์งœ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ•จ์ˆ˜ (8์ž๋ฆฌ ๋˜๋Š” 6์ž๋ฆฌ ์ง€์›) export const isValidDateString = (dateStr: string): boolean => { // ์ˆซ์ž๋งŒ ์ถ”์ถœ const cleanStr = dateStr.replace(/\D/g, ''); // 8์ž๋ฆฌ (yyyymmdd) ๋˜๋Š” 6์ž๋ฆฌ (yyyymm) ํ™•์ธ if (cleanStr.length === 8) { // ์—ฐ๋„, ์›”, ์ผ ์ถ”์ถœ const year = parseInt(cleanStr.substring(0, 4)); const month = parseInt(cleanStr.substring(4, 6)); const day = parseInt(cleanStr.substring(6, 8)); // ๊ธฐ๋ณธ ๋ฒ”์œ„ ๊ฒ€์‚ฌ if (year < 1900 || year > 2200) return false; if (month < 1 || month > 12) return false; if (day < 1 || day > 31) return false; // Date ๊ฐ์ฒด๋กœ ์‹ค์ œ ์œ ํšจํ•œ ๋‚ ์งœ์ธ์ง€ ๊ฒ€์‚ฌ const date = new Date(year, month - 1, day); return date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day; } else if (cleanStr.length === 6) { // ์—ฐ๋„, ์›” ์ถ”์ถœ const year = parseInt(cleanStr.substring(0, 4)); const month = parseInt(cleanStr.substring(4, 6)); // ๊ธฐ๋ณธ ๋ฒ”์œ„ ๊ฒ€์‚ฌ if (year < 1900 || year > 2200) return false; if (month < 1 || month > 12) return false; return true; } return false; }; // ๐ŸŽฏ ๋‚ ์งœ ํฌ๋งทํŒ… ํ•จ์ˆ˜ export const formatDateString = (dateStr: string): string => { const cleanStr = dateStr.replace(/\D/g, ''); // ์ˆซ์ž๋งŒ ์ถ”์ถœ if (!isValidDateString(cleanStr)) { return dateStr; // ์œ ํšจํ•˜์ง€ ์•Š์€ ๋‚ ์งœ๋ฉด ์›๋ณธ ๋ฐ˜ํ™˜ } const year = cleanStr.substring(0, 4); const month = cleanStr.substring(4, 6); // parseInt๋กœ ์•ž์˜ 0 ์ œ๊ฑฐ // const month = parseInt(cleanStr.substring(4, 6)); // parseInt๋กœ ์•ž์˜ 0 ์ œ๊ฑฐ // const day = parseInt(cleanStr.substring(6, 8)); // parseInt๋กœ ์•ž์˜ 0 ์ œ๊ฑฐ const day = cleanStr.substring(6, 8); // parseInt๋กœ ์•ž์˜ 0 ์ œ๊ฑฐ return `${year}-${month}-${day}`; };