// 日期格式化函数 by liaody 2025-3-5 // 使用示例 ///const now = new Date(); //const formattedDate = formatDate(now); //console.log(formattedDate); function formatDate(date, format = 'YYYY-MM-DD') { if (!(date instanceof Date)) { date = new Date(date); } const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hour = String(date.getHours()).padStart(2, '0'); const minute = String(date.getMinutes()).padStart(2, '0'); const second = String(date.getSeconds()).padStart(2, '0'); return format .replace('YYYY', year) .replace('MM', month) .replace('DD', day) .replace('HH', hour) .replace('mm', minute) .replace('ss', second); } // 计算两个日期之间相差的天数 // 使用示例 // const dateA = '2025-01-01'; // const dateB = '2025-01-10'; // const daysDiff = getDaysDifference(dateA, dateB); // console.log(daysDiff); function getDaysDifference(date1, date2) { const oneDay = 24 * 60 * 60 * 1000; // 一天的毫秒数 const firstDate = new Date(date1); const secondDate = new Date(date2); const diffDays = Math.round(Math.abs((firstDate - secondDate) / oneDay)); return diffDays; } // 使用示例 // const startDate = '2025-03-01'; // const daysToAdd = 5; // const futureDate = getDateAfterDays(startDate, daysToAdd); // const formattedFutureDate = formatDate(futureDate); // console.log(formattedFutureDate); // 获取指定日期之后 n 天的日期 function getDateAfterDays(date, days) { const newDate = new Date(date); newDate.setDate(newDate.getDate() + days); return newDate; } function getDateAfterMonths(date, months) { const newDate = new Date(date); const originalDate = date.getDate(); // 保存原始年月日 const originalYear = date.getFullYear(); const originalMonth = date.getMonth(); // 计算目标年月 const totalMonths = originalMonth + months; const expectedYear = originalYear + Math.floor(totalMonths / 12); const expectedMonth = totalMonths % 12; // 尝试设置新月份 newDate.setMonth(totalMonths); // 处理月末边界情况 if ( newDate.getFullYear() !== expectedYear || newDate.getMonth() !== expectedMonth ) { // 当设置月份失败时(如1月31日设置到2月) // 设置为目标月份的最后一天 newDate.setFullYear(expectedYear, expectedMonth + 1, 0); } else if (newDate.getDate() !== originalDate) { // 当日期自动变化时(如1月30日设置到2月) // 同样设置为目标月份的最后一天 newDate.setDate(0); } return newDate; } //计算当前日期占全年的进度数据 // 示例用法 // console.log(getYearProgress()); // 输出如 "35.42%" function getYearProgress() { const now = new Date(); // 当前时间 const year = now.getFullYear(); // 关键时间点 const yearStart = new Date(year, 0, 1); // 当年1月1日 const nextYearStart = new Date(year + 1, 0, 1); // 下一年1月1日 // 计算时间差(毫秒) const totalMs = nextYearStart - yearStart; // 全年总时长 const passedMs = now - yearStart; // 已过时长 // 计算百分比(保留2位小数) const progress = ((passedMs / totalMs) * 100).toFixed(2); return parseFloat(progress); } export { formatDate, getDateAfterDays, getDaysDifference, getDateAfterMonths, getYearProgress }