如何通过Moment.js或原生JavaScript处理含00占位的日期字符串
解决方案
使用 Moment.js 实现
由于原始日期字符串包含00格式的月份或日期,Moment.js 的严格解析模式会判定这类日期无效,因此我们可以先拆分字符串提取年、月、日信息,再根据规则选择输出格式:
function formatDateWithMoment(dateStr) { const year = dateStr.slice(0, 4); const month = dateStr.slice(4, 6); const day = dateStr.slice(6, 8); if (month === '00' && day === '00') { return year; } else if (day === '00') { // 用当月1号创建有效日期,避免00日期的解析问题 const validDate = moment(`${year}-${month}-01`, 'YYYY-MM-DD'); return validDate.format('MMM YYYY'); } // 可根据需求补充其他日期格式的处理逻辑 return dateStr; } // 测试用例 console.log(formatDateWithMoment("19780000")); // 输出 "1978" console.log(formatDateWithMoment("19781100")); // 输出 "Nov 1978"
使用原生 JavaScript 实现
如果无法依赖 Moment.js,可通过字符串拆分结合Intl.DateTimeFormat完成格式化:
function formatDateWithNativeJS(dateStr) { const year = dateStr.slice(0, 4); const month = dateStr.slice(4, 6); const day = dateStr.slice(6, 8); if (month === '00' && day === '00') { return year; } else if (day === '00') { // 注意:JavaScript 日期对象的月份是0-11,需转数字后减1 const date = new Date(year, parseInt(month, 10) - 1, 1); // 使用 Intl 格式化年月为 "Nov 1978" 格式 return new Intl.DateTimeFormat('en-US', { year: 'numeric', month: 'short' }).format(date); } // 可根据需求补充其他日期格式的处理逻辑 return dateStr; } // 测试用例 console.log(formatDateWithNativeJS("19780000")); // 输出 "1978" console.log(formatDateWithNativeJS("19781100")); // 输出 "Nov 1978"
内容的提问来源于stack exchange,提问作者Ranjan Singh
相关产品推荐
相关产品推荐

