在JavaScript中将dd/MM/yyyy hh:mm tt格式转换为yyyy-mm-ddThh:mm格式
解决JavaScript解析dd/MM/yyyy hh:mm tt日期格式失败的问题
你遇到的Invalid Date是因为JavaScript的Date构造函数无法直接识别dd/MM/yyyy hh:mm tt这种格式——它默认更倾向于MM/dd/yyyy(美式日期)或者ISO标准格式,对于日在前的带AM/PM的日期解析会失败。下面提供两种可靠的转换方法:
方法一:手动解析日期(无环境依赖)
手动拆分输入字符串的各个部分,转换12小时制到24小时制,再拼接成目标格式:
function convertDateFormat(inputDateStr) { // 拆分日期、时间、AM/PM部分 const [datePart, timePart, period] = inputDateStr.split(' '); // 拆分日、月、年 const [day, month, year] = datePart.split('/'); // 拆分时、分 let [hours, minutes] = timePart.split(':'); // 处理12小时制转24小时制 if (period === 'PM' && hours !== '12') { hours = String(parseInt(hours, 10) + 12); } if (period === 'AM' && hours === '12') { hours = '00'; } // 补零确保两位数字格式 const formattedHours = hours.padStart(2, '0'); const formattedMinutes = minutes.padStart(2, '0'); // 拼接成目标格式 return `${year}-${month}-${day}T${formattedHours}:${formattedMinutes}`; } // 测试示例 console.log(convertDateFormat('25/05/2023 2:30 PM')); // 输出 "2023-05-25T14:30" console.log(convertDateFormat('25/05/2023 12:30 AM')); // 输出 "2023-05-25T00:30" console.log(convertDateFormat('25/05/2023 12:30 PM')); // 输出 "2023-05-25T12:30"
方法二:转换为Date可识别的格式
先通过正则把dd/MM/yyyy替换为MM/dd/yyyy(美式日期格式),让Date构造函数能正确解析,再提取时间部分拼接成目标格式:
function convertDateFormat(inputDateStr) { // 将dd/MM/yyyy替换为MM/dd/yyyy,适配Date构造函数的解析规则 const usFormattedDate = inputDateStr.replace(/(\d{2})\/(\d{2})\/(\d{4})/, '$2/$1/$3'); const date = new Date(usFormattedDate); // 提取各时间部分并补零 const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); return `${year}-${month}-${day}T${hours}:${minutes}`; } // 测试示例 console.log(convertDateFormat('25/05/2023 2:30 PM')); // 输出 "2023-05-25T14:30"
注意:方法二依赖浏览器/环境对美式日期格式的支持,主流现代浏览器都能正常处理,但如果需要兼容老旧环境,方法一的手动解析更可靠。
内容的提问来源于stack exchange,提问作者Sushant Bhingare
相关产品推荐
相关产品推荐

