如何在jQuery中通过两个日期计算出正确年龄?
解决日期字符串直接相减计算年龄的问题
嘿,我懂你现在的困扰啦——直接把currentDate和date[0]这两个日期字符串相减肯定得不到正确的年龄,因为它们本质是文本格式,JavaScript没办法直接识别并计算日期差值,这样操作只会得到NaN或者毫无意义的数值。
问题根源
你写的currentDate和date[0]都是类似"2018-06-30"的字符串,当你尝试用currentDate - date[0]时,JS会尝试把它们转为数字,但这种格式的字符串转数字会失败,结果就是NaN,自然算不出正确年龄。
正确的计算方法
我们需要把日期字符串转为Date对象,然后通过对比年份、月份和日期来精准计算年龄:
- 先把出生日期字符串转为
Date实例 - 获取当前日期的年、月、日信息
- 计算初始年龄(当前年份 - 出生年份)
- 调整年龄:如果当前月份小于出生月份,或者月份相同但当前日期小于出生日期,说明还没到今年的生日,年龄要减1
修改后的代码
var date_time = elem.added_date; var dateParts = date_time.split(' '); var birthDateStr = dateParts[0]; // 比如"1988-01-30" // 把出生日期字符串转为Date对象 var birthDate = new Date(birthDateStr); var currentDate = new Date(); // 获取各部分日期信息 var currentYear = currentDate.getFullYear(); var currentMonth = currentDate.getMonth(); // 月份是0-11,注意! var currentDay = currentDate.getDate(); var birthYear = birthDate.getFullYear(); var birthMonth = birthDate.getMonth(); var birthDay = birthDate.getDate(); // 计算初始年龄 var age = currentYear - birthYear; // 调整年龄:如果还没到今年生日,减1 if (currentMonth < birthMonth || (currentMonth === birthMonth && currentDay < birthDay)) { age--; } // 现在age就是正确的年龄啦 console.log(age);
注意点
Date.getMonth()返回的是0到11的数值(0代表1月,11代表12月),所以不用像你之前那样加1,直接对比就行- 一定要确保
birthDateStr的格式是JS的Date对象能识别的(YYYY-MM-DD是标准格式,没问题)
内容的提问来源于stack exchange,提问作者Shruti
相关产品推荐
相关产品推荐

