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

使用JavaScript提取并解析字符串日期时遇到格式化异常问题

问题根源与解决方案

你的问题出在日期解析环节:JavaScript原生Date构造函数无法直接识别dd-mm-yyyy格式的字符串,调用new Date(cDate)会得到无效的Date对象,后续调用getDate()、getMonth()等方法都会返回NaN,最终导致formatDate输出NaN-NaN-NaN。

修正步骤

  1. 手动拆分日期分量:将提取到的cDate按-分割,重新整理为Date构造函数能识别的参数顺序(年、月、日,注意月份是0基索引,要减1)。
  2. 确保初始日期有效:用拆分后的分量创建Date对象,避免自动解析失败。
  3. 保留原有逻辑的结束日期计算:Date构造函数会自动处理跨月/跨年的边界情况(比如31-01-2023的下月同日会自动调整为28/29-02-2023)。

修正后的完整代码

var cDate = dText.match(/\d{2}-\d{2}-\d{4}/)[0];
console.log(cDate);

// 拆分dd-mm-yyyy格式的日期,转换为Date构造函数需要的参数
const [day, month, year] = cDate.split('-').map(Number);
let initialStartDate = new Date(year, month - 1, day);

// 计算结束日期:下月同日
let initialEndDate = new Date(year, month, day);

startDateString = formatDate(initialStartDate);
endDateString = formatDate(initialEndDate);

$("#startDateF").data("initialValue", startDateString);
$("#endDateF").data("initialValue", endDateString);

function formatDate(date) {
    let day = ("0" + date.getDate()).slice(-2);
    let month = ("0" + (date.getMonth() + 1)).slice(-2);
    let year = date.getFullYear();
    return day + "-" + month + "-" + year;
}

验证示例

当cDate = 16-04-2023时:

  • initialStartDate会被正确解析为2023年4月16日,格式化后输出16-04-2023
  • initialEndDate为2023年5月16日,格式化后输出16-05-2023,完全符合预期。

内容的提问来源于stack exchange,提问作者jessiepinkman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:42:21