使用JavaScript和PHP根据出生日期计算年、月时长,仅能获取天数的问题
计算出生日期对应的年数与月数解决方案
直接通过毫秒差换算年、月并不准确,因为不同月份天数不同,还有闰年的影响。正确的做法是直接操作Date对象的年、月、日属性来计算,以下是修改后的代码:
$("#nacimiento").change(function(){ const nacimiento = $("#nacimiento").val(); const fechaInicio = new Date(nacimiento); const fechaFin = new Date(); // 直接获取当前日期,替代PHP输出的方式 // 获取年、月、日数值 let anios = fechaFin.getFullYear() - fechaInicio.getFullYear(); let meses = fechaFin.getMonth() - fechaInicio.getMonth(); const diaFin = fechaFin.getDate(); const diaInicio = fechaInicio.getDate(); // 处理日期未到当月生日的情况 if (diaFin < diaInicio) { meses--; // 如果月数为负数,从年数里借1年 if (meses < 0) { anios--; meses += 12; } } // 输出结果,可按需调整显示格式 const resultado = `已过去 ${anios} 年 ${meses} 个月`; console.log(resultado); document.getElementById('meses').innerHTML = resultado; });
关键说明:
- 放弃毫秒差计算方式,避免因月份天数、闰年导致的误差
- 先计算年差和月差,再通过日期的日部分判断是否需要调整:如果当前日期的日小于出生日期的日,说明当月还没到生日,月数要减1,若月数变为负数则从年数中扣除1年并补12个月
- 用
new Date()直接获取当前日期,比PHP输出日期字符串更简洁可靠
内容的提问来源于stack exchange,提问作者Kezman10
相关产品推荐
相关产品推荐

