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

TypeScript无依赖转换dd.mm.yyyy格式日期字符串至Date类型遇NaN问题

解决自定义日期格式转Date的NaN问题

原生Date构造函数仅能可靠解析标准格式(如ISO 8601),像你遇到的德语/丹麦语格式(dd.MM.yyyy, HH:mm或dd.MM.yyyy HH:mm)属于自定义格式,直接解析会返回Invalid Date(表现为NaN)。不用第三方包的话,手动提取日期时间分量是最稳妥的方案:

实现步骤

  1. 统一字符串格式:先把带逗号的德语格式字符串中的逗号去掉,变成和丹麦语一致的空格分隔格式。
  2. 拆分日期与时间:按空格分割字符串,分离出日期段和时间段。
  3. 提取各时间分量:日期段按.拆分得到日、月、年;时间段按:拆分得到时、分。注意:Date的月份是0-11,所以要把提取到的月份减1。
  4. 构建Date对象:用提取到的分量直接创建Date实例,若需要UTC时间则用Date.UTC方法。

TypeScript代码实现

// 解析自定义格式的日期字符串为本地时间Date对象
function parseLocalDate(dateStr: string): Date {
    // 统一格式:去掉逗号(兼容德语格式)
    const normalizedStr = dateStr.replace(',', '').trim();
    // 拆分日期和时间部分
    const [datePart, timePart] = normalizedStr.split(' ');
    // 提取日、月、年并转为数字
    const [day, month, year] = datePart.split('.').map(Number);
    // 提取时、分并转为数字
    const [hour, minute] = timePart.split(':').map(Number);
    
    // 月份减1,因为Date的月份是0索引(0=1月,11=12月)
    return new Date(year, month - 1, day, hour, minute);
}

// 解析自定义格式的日期字符串为UTC时间Date对象
function parseUtcDate(dateStr: string): Date {
    const normalizedStr = dateStr.replace(',', '').trim();
    const [datePart, timePart] = normalizedStr.split(' ');
    const [day, month, year] = datePart.split('.').map(Number);
    const [hour, minute] = timePart.split(':').map(Number);
    
    // 使用Date.UTC生成UTC时间戳,再转为Date对象
    return new Date(Date.UTC(year, month - 1, day, hour, minute));
}

// 测试示例
const germanDate = "22.02.2022, 15:56";
const danishDate = "22.02.2022 15:56";

console.log(parseLocalDate(germanDate)); // 输出对应本地时间的Date对象
console.log(parseUtcDate(danishDate)); // 输出对应UTC时间的Date对象

针对你现有代码的调整

你的getUtcDate函数是基于已有Date对象转UTC格式,若要从自定义字符串开始处理,可以结合上面的解析函数改造:

private getUtcDateFromCustomStr(dateStr: string): Date {
    const parsedLocalDate = parseLocalDate(dateStr);
    // 将本地时间转为UTC时间对象
    return new Date(Date.UTC(
        parsedLocalDate.getFullYear(),
        parsedLocalDate.getMonth(),
        parsedLocalDate.getDate(),
        parsedLocalDate.getHours(),
        parsedLocalDate.getMinutes()
    ));
}

这种手动解析的方式完全依赖原生API,不需要任何第三方包,且能确保对目标格式的解析准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:43:25