class DateUtil { static formatDateToMonthDay(dateStr) { const date = DateUtil._parseDate(dateStr); if (!DateUtil._isValidDate(date)) return ''; return `${date.getMonth() + 1}月${date.getDate()}日`; } static formatDateToYearMonthDay(dateStr) { const date = DateUtil._parseDate(dateStr); if (!DateUtil._isValidDate(date)) return ''; return `${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}日`; } static formatDateToYMD(dateStr) { const date = DateUtil._parseDate(dateStr); if (!DateUtil._isValidDate(date)) return ''; return [ date.getFullYear(), String(date.getMonth() + 1).padStart(2, '0'), String(date.getDate()).padStart(2, '0'), ].join('-'); } static formatDateTimeToYMDHMS(dateStr) { const date = DateUtil._parseDate(dateStr); if (!DateUtil._isValidDate(date)) return ''; return `${DateUtil.formatDateToYMD(date)} ${DateUtil._timeParts(date).join(':')}`; } static formatDateTimeToYMDHM(dateStr) { const date = DateUtil._parseDate(dateStr); if (!DateUtil._isValidDate(date)) return ''; const [hour, minute] = DateUtil._timeParts(date); return `${DateUtil.formatDateToYMD(date)} ${hour}:${minute}`; } static formatTimeToHMS(dateStr) { const date = typeof dateStr === 'number' ? new Date(dateStr) : DateUtil._parseDate(dateStr); if (!DateUtil._isValidDate(date)) return ''; return DateUtil._timeParts(date).join(':'); } static getCurrentDate() { return new Date(); } static isSameDay(date1, date2) { const d1 = DateUtil._parseDate(date1); const d2 = DateUtil._parseDate(date2); if (!DateUtil._isValidDate(d1) || !DateUtil._isValidDate(d2)) return false; return ( d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth() && d1.getDate() === d2.getDate() ); } static _parseDate(dateStr) { if (dateStr instanceof Date) return dateStr; if (typeof dateStr === 'number') return new Date(dateStr); if (typeof dateStr !== 'string') return null; const value = dateStr.trim(); if (!value) return null; if (/^\d{4}-\d{2}-\d{2}$/.test(value)) { return new Date(value.replace(/-/g, '/')); } return new Date(value); } static _isValidDate(date) { return date instanceof Date && !Number.isNaN(date.getTime()); } static _timeParts(date) { return [ String(date.getHours()).padStart(2, '0'), String(date.getMinutes()).padStart(2, '0'), String(date.getSeconds()).padStart(2, '0'), ]; } } if (typeof module !== 'undefined' && module.exports) { module.exports = DateUtil; } else if (typeof window !== 'undefined') { window.DateUtil = DateUtil; }