如何用Javascript/ECMAScript匹配YYYY/MM/DD与YY/MM/DD格式的DOB?
解决YYYY/MM/DD与YY/MM/DD日期匹配问题
别担心,这个日期格式匹配的问题其实很好解决,哪怕你刚接触JS/ECMAScript也能快速上手!咱们核心思路就是把两种格式的日期转换成统一的形式,再做对比就行,下面给你几种实用的方法:
方法1:直接截取完整日期的后两位年份,对比字符串
这是最简单的方法,适合你能确保两种日期格式完全规范的情况(比如都是斜杠分隔,月份、日期都是两位数字):
// 示例:传入的完整日期fullDOB = "2023/10/05",用户输入的短日期shortDOB = "23/10/05" function isDOBMatching(fullDOB, shortDOB) { // 把YYYY/MM/DD的年份截取后两位,得到YY/MM/DD格式 const convertedFullDOB = fullDOB.slice(2); // 直接对比转换后的字符串和用户输入的短日期 return convertedFullDOB === shortDOB; } // 测试调用 console.log(isDOBMatching("2023/10/05", "23/10/05")); // 输出 true console.log(isDOBMatching("1995/03/12", "95/03/12")); // 输出 true
方法2:拆分日期组件,补全年份后对比
如果需要考虑世纪规则(比如应用里的"99"是1999还是2099?),这种方法更灵活,能自定义年份补全逻辑:
function isDOBMatching(fullDOB, shortDOB) { // 拆分完整日期的年、月、日 const [fullYear, fullMonth, fullDay] = fullDOB.split('/'); // 拆分短日期的年、月、日 const [shortYear, shortMonth, shortDay] = shortDOB.split('/'); // 根据业务规则补全年份:这里示例是YY>=30则为19XX,否则为20XX const fullShortYear = parseInt(shortYear) >= 30 ? `19${shortYear}` : `20${shortYear}`; // 逐一对比年、月、日是否完全一致 return fullYear === fullShortYear && fullMonth === shortMonth && fullDay === shortDay; } // 测试调用 console.log(isDOBMatching("1990/07/25", "90/07/25")); // 输出 true console.log(isDOBMatching("2015/11/01", "15/11/01")); // 输出 true
方法3:转换为Date对象,对比时间戳
如果担心字符串对比有格式不规范的风险(比如用户输入的日期少了前导零),可以把两个日期都转成Date对象,通过时间戳来对比:
function isDOBMatching(fullDOB, shortDOB) { // 处理完整日期:拆分后转成数字,注意Date的月份是0-based(1月是0) const [fullY, fullM, fullD] = fullDOB.split('/').map(Number); const fullDate = new Date(Date.UTC(fullY, fullM - 1, fullD)); // 处理短日期:补全年份后转成Date对象 const [shortY, shortM, shortD] = shortDOB.split('/').map(Number); const fullShortY = shortY >= 30 ? 1900 + shortY : 2000 + shortY; const shortDate = new Date(Date.UTC(fullShortY, shortM - 1, shortD)); // 对比两个日期的时间戳(只保留日期部分,避免时区干扰) return fullDate.getTime() === shortDate.getTime(); } // 测试调用 console.log(isDOBMatching("2000/02/29", "00/02/29")); // 输出 true console.log(isDOBMatching("1988/05/03", "88/5/3")); // 输出 true(自动处理了缺省的前导零)
关键注意事项
- 格式规范性:如果用户输入的短日期可能存在格式不统一(比如用横杠分隔、缺省前导零),建议先做统一格式化处理,比如用正则替换分隔符、给单数字的月/日补零。
- 世纪规则:一定要和你的应用业务逻辑对齐!不同系统对两位年份的世纪判定规则不同,比如有些系统会把"00"-"29"归为2000-2029,"30"-"99"归为1930-1999,你需要根据实际情况调整代码里的年份补全逻辑。
内容的提问来源于stack exchange,提问作者Russell Heaney
相关产品推荐
相关产品推荐

