JavaScript日期转换遇阻,已有方法失效求可行方案
解决JavaScript日期字符串转换失败的问题
你的日期字符串Mar 4 ,2022 10 30 PM格式不符合标准识别规则,导致new Date()和moment.js无法解析,问题出在两处:
- 日期与年份间有多余空格(
4 ,2022) - 小时和分钟用空格分隔而非冒号(
10 30)
以下是两种可行的解决方法:
方法一:预处理字符串后再转换
先修正字符串格式,再用原生Date或moment.js处理:
const rawDate = json[0].aDate; // 修正格式:移除日期后的多余空格,替换小时分钟间的空格为冒号 const fixedDateStr = rawDate.replace(/(\d+) ,/, '$1,').replace(/(\d+) (\d+) (AM|PM)/, '$1:$2 $3'); // 用原生Date转换并格式化 const date = new Date(fixedDateStr); const formatted = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`; console.log(formatted); // 输出示例:'2022-3-4 22:30:00' // 用moment.js转换(需确保已引入moment) const momentFormatted = moment(fixedDateStr).format('YYYY-M-D hh:mm:ss'); console.log(momentFormatted); // 输出示例:'2022-3-4 10:30:00'
方法二:手动解析日期各部分
直接拆分字符串提取年、月、日、时、分,手动构建Date对象:
const rawDate = json[0].aDate; const parts = rawDate.split(/\s+/); // 月份映射表 const monthMap = {Jan:0, Feb:1, Mar:2, Apr:3, May:4, Jun:5, Jul:6, Aug:7, Sep:8, Oct:9, Nov:10, Dec:11}; const year = parseInt(parts[2]); const month = monthMap[parts[0]]; const day = parseInt(parts[1].replace(',', '')); const hour = parseInt(parts[3]); const minute = parseInt(parts[4]); const period = parts[5]; // 12小时制转24小时制 const adjustedHour = period === 'PM' && hour !==12 ? hour +12 : period === 'AM' && hour ===12 ? 0 : hour; const date = new Date(year, month, day, adjustedHour, minute); const formatted = `${year}-${month + 1}-${day} ${adjustedHour}:${minute}:${date.getSeconds()}`; console.log(formatted); // 输出示例:'2022-3-4 22:30:00'
内容的提问来源于stack exchange,提问作者김지엽
相关产品推荐
相关产品推荐

