You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者김지엽

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 04:22:51