/** * 日期格式化格式化工具 * @param {Date|String|Number} time - 时间对象、字符串或时间戳 * @param {String} format - 格式化字符串,例如:'{yyyy}-{mm}-{dd} {hh}:{ii}:{ss}' 或 '{yyyyyy}-{mm}-{dd}T{hh}:{ii}:{ss}' * @returns {String} 格式化后的日期字符串 */ export function parseTime(time, format = '{yyyy}-{mm}-{dd} {hh}:{ii}:{ss}') { if (!time) return ''; // 处理时间戳(如果是10位数字,转为毫秒) if (typeof time === 'number') { if (time.toString().length === 10) { time = time * 1000; } time = new Date(time); } // 处理字符串格式时间(核心修复) if (typeof time === 'string') { // 1. 清除可能的重复时间部分(如 "2025-08-12T00:00:00 00:00:00" → "2025-08-12T00:00:00") time = time.replace(/(\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2})\s+.*/, '$1'); // 2. 兼容iOS的日期格式(将-转为/,T转为空格) time = new Date(time.replace(/-/g, '/').replace('T', ' ')); } // 如果不是Date对象,直接返回 if (!(time instanceof Date) || isNaN(time.getTime())) { return ''; } const formatObj = { y: time.getFullYear(), m: time.getMonth() + 1, d: time.getDate(), h: time.getHours(), i: time.getMinutes(), s: time.getSeconds(), a: time.getDay() }; return format.replace(/{([ymdhisa])+}/g, (result, key) => { const value = formatObj[key]; // 不足两位补零 if (value.toString().length < 2) { return '0' + value; } return value || 0; }); } /** * 生成传给后端的标准日期格式(带T分隔符) * @param {Date|String|Number} time - 时间对象、字符串或时间戳 * @returns {String} 格式化后的日期字符串,例如:'2025-08-12T00:00:00' */ export function formatTimeForBackend(time) { // 先清理时间格式,再用T分隔符格式化 return parseTime(time, '{yyyy}-{mm}-{dd}T{hh}:{ii}:{ss}'); }