使用JavaScript修改日期字符串:移除时间并缩写月份
解决日期字符串处理问题:移除时间并缩写月份
我来帮你搞定这个问题!你已经完成了月份缩写的部分,现在只需要加上移除时间的逻辑,再做一点细节优化就能达到目标。
核心思路
- 移除时间部分:时间格式主要分两类——带
am/pm的数字时间(如10am、4pm),以及特殊时间词(midnight、noon)。可以用正则表达式精准匹配这些内容并移除。 - 优化月份替换:把月份数组改成对象,查找替换会更高效,不用循环整个数组。
- 清理多余空格:移除时间后可能会留下连续空格,最后统一清理一下。
完整代码实现
var dateExample = '2nd August 9am - 27th September midnight'; function trimDate(date){ // 第一步:移除所有时间相关内容 const timeRemoved = date.replace(/\b(\d+(am|pm)|midnight|noon)\b/gi, ''); // 第二步:替换月份为3字符缩写 const monthMap = { 'January': 'Jan', 'February': 'Feb', 'March': 'Mar', 'April': 'Apr', 'May': 'May', 'June': 'Jun', 'July': 'Jul', 'August': 'Aug', 'September': 'Sep', 'October': 'Oct', 'November': 'Nov', 'December': 'Dec' }; const monthReplaced = timeRemoved.replace(/\b(January|February|March|April|May|June|July|August|September|October|November|December)\b/gi, match => monthMap[match]); // 第三步:清理多余的连续空格和首尾空格 const finalResult = monthReplaced.replace(/\s+/g, ' ').trim(); console.log(finalResult); return finalResult; } trimDate(dateExample); // 输出:2nd Aug - 27th Sep
代码解释
- 正则移除时间:
/\b(\d+(am|pm)|midnight|noon)\b/gi中的\b是单词边界,确保不会误匹配其他字符串;gi表示全局匹配且不区分大小写(比如AM、Midnight也能匹配)。 - 月份对象替换:用对象存储完整月份和缩写的映射,通过正则匹配到完整月份后直接取对应缩写,比循环数组更高效。
- 清理空格:
/\s+/g匹配所有连续空格,替换成单个空格,再用trim()去掉首尾可能的空格,保证结果格式整洁。
测试其他案例
比如测试你的另一个例子:
trimDate('20th June 10am - 5th September 10pm'); // 输出:20th Jun - 5th Sep trimDate('28th September noon - 4pm'); // 输出:28th Sep -
如果需要处理第二个案例中右边空的情况(比如-后面没有日期),可以再加个正则移除单独的-或者调整逻辑,不过根据你的需求,当前代码已经满足基本要求啦。
内容的提问来源于stack exchange,提问作者Mika
相关产品推荐
相关产品推荐

