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

如何在NestJS+TypeScript中解析匈牙利格式日期字符串?

解析匈牙利日期字符串的解决方案

JavaScript原生Date.parse()对非标准本地化日期格式支持有限,尤其是带匈牙利月份名称的字符串,所以需要针对性处理。以下是两种适用于NestJS/TypeScript的解决方案:

方案一:手动解析(无需额外依赖)

通过正则匹配两种格式,结合匈牙利月份映射表构造Date对象:

// 匈牙利月份名称到数字的映射(注意拼写和重音)
const hungarianMonths: Record<string, number> = {
  január: 1,
  február: 2,
  március: 3,
  április: 4,
  május: 5,
  június: 6,
  július: 7,
  augusztus: 8,
  szeptember: 9,
  október: 10,
  november: 11,
  december: 12
};

export function parseHungarianDate(dateStr: string): Date | null {
  // 匹配带月份名称的格式:YYYY. MMMM DD. HH:mm
  const namedMonthPattern = /^(\d{4})\. (\w+) (\d{2})\. (\d{2}):(\d{2})$/;
  const namedMatch = dateStr.match(namedMonthPattern);
  
  if (namedMatch) {
    const [, year, monthName, day, hour, minute] = namedMatch;
    const monthNum = hungarianMonths[monthName.toLowerCase()];
    if (!monthNum) return null;
    
    // Date构造函数的月份从0开始,所以要减1
    return new Date(
      parseInt(year),
      monthNum - 1,
      parseInt(day),
      parseInt(hour),
      parseInt(minute)
    );
  }

  // 匹配纯数字格式:YYYY.MM.DD. HH:mm
  const numericMonthPattern = /^(\d{4})\.(\d{2})\.(\d{2})\. (\d{2}):(\d{2})$/;
  const numericMatch = dateStr.match(numericMonthPattern);
  
  if (numericMatch) {
    const [, year, month, day, hour, minute] = numericMatch;
    return new Date(
      parseInt(year),
      parseInt(month) - 1,
      parseInt(day),
      parseInt(hour),
      parseInt(minute)
    );
  }

  return null;
}

使用示例

const date1 = parseHungarianDate("2022. október 22. 12:00");
const date2 = parseHungarianDate("2022.11.01. 16:30");

console.log(date1); // 输出: Sat Oct 22 2022 12:00:00 GMT+...
console.log(date2); // 输出: Tue Nov 01 2022 16:30:00 GMT+...

方案二:使用date-fns库(更简洁,支持更多场景)

date-fns提供了多语言日期解析能力,适合处理本地化格式:

  1. 安装依赖
npm install date-fns @date-fns/locale
  1. 实现解析函数
import { parse } from 'date-fns';
import { hu } from '@date-fns/locale';

export function parseHungarianDate(dateStr: string): Date | null {
  // 尝试解析带月份名称的格式
  try {
    return parse(dateStr, 'yyyy. MMMM dd. HH:mm', new Date(), { locale: hu });
  } catch {}

  // 尝试解析纯数字格式
  try {
    return parse(dateStr, 'yyyy.MM.dd. HH:mm', new Date());
  } catch {}

  return null;
}

注意事项

  • 手动解析时要确保月份名称的拼写完全匹配(包括重音符号),如果抓取的字符串有大小写差异,统一转成小写处理
  • 使用date-fns时,确保@date-fns/locale版本与date-fns版本兼容
  • 可以将解析函数封装成NestJS自定义管道,在DTO中自动转换日期字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:50:37