JavaScript两个日期转换函数如何合并优化?有哪些最佳实践?
优化方案
你可以直接利用JavaScript的split()方法支持正则表达式的特性,一次性匹配两种分隔符,完全合并两个重复方法,同时还能兼容|前后可能存在的多余空格场景,优化后的代码如下:
let DateFormatHelper = function () { // 合并后的通用转换方法,支持空格/|分隔的日期时间字符串 this.convertToJSDate = (dateStr) => { // 正则匹配分隔符:| 或者空格,同时自动忽略|前后的空白字符 const dateStrParts = dateStr.split(/\s*\|\s*|\s+/); const date = dateStrParts[0]; // 兼容时间带AM/PM的场景,避免切割丢失标识 const time = dateStrParts.slice(1).join(' '); const [day, month, year] = date.split("-").map(part => part.trim()); const newDateStr = `${year}-${month}-${day} ${time}`; return new Date(newDateStr); }; };
优化点说明:
- 用正则
/\s*\|\s*|\s+/作为分隔规则,同时适配两种分隔场景:匹配|分隔的情况时自动去掉|前后的多余空格,也能匹配空格分隔的情况 - 时间部分用
slice(1).join(' ')处理,修复原实现中时间带AM/PM标识时,会丢失PM/AM内容的隐患 - 用数组解构加
map简化日期部分的trim逻辑,减少重复代码
相关编码最佳实践
- 遵循*DRY(Don't Repeat Yourself)*原则:重复逻辑要尽量合并,避免后续修改转换规则时需要同步修改多个地方,降低维护成本和出bug的概率
- 入参兼容处理:不要对输入格式做过度严格的假设,比如处理分隔符时兼容多余空白字符,能提升方法的鲁棒性
- 可补充入参校验逻辑,避免非法输入返回无效Date时没有明确提示,示例如下:
this.convertToJSDate = (dateStr) => { if (typeof dateStr !== 'string') throw new Error('入参必须为日期字符串') const dateStrParts = dateStr.split(/\s*\|\s*|\s+/); if (dateStrParts.length < 2) throw new Error('日期字符串格式不正确,需要包含日期和时间部分') const date = dateStrParts[0]; const time = dateStrParts.slice(1).join(' '); const [day, month, year] = date.split("-").map(part => part.trim()); const newDateStr = `${year}-${month}-${day} ${time}`; const targetDate = new Date(newDateStr); if (isNaN(targetDate.getTime())) throw new Error('无效的日期格式') return targetDate }
- 如果后续可能扩展更多分隔符,也可以把分隔规则抽成可配置的参数,不需要修改核心转换逻辑。
内容的提问来源于stack exchange,提问作者Allison.A
相关产品推荐
相关产品推荐

