2 回答

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
不好意思,經(jīng)過(guò)仔細(xì)查看和修改,問(wèn)題已經(jīng)得到解決。在此總結(jié)一下以供其他人借鑒:
1.function jsGetAge(strBirthday)函數(shù)的位置沒(méi)有問(wèn)題,可寫(xiě)在$(document).ready(function() {}中或外部。
2.問(wèn)題產(chǎn)生的原因是我的頁(yè)面同時(shí)加載了其他js,加載速度較慢,導(dǎo)致click函數(shù)無(wú)法快速加載,因此誤以為沒(méi)有效果。實(shí)際上是有效果的。
3.大家不要直接使用這個(gè)根據(jù)生日日期計(jì)算周歲的函數(shù),這個(gè)函數(shù)存在問(wèn)題,沒(méi)有對(duì)同年進(jìn)行進(jìn)一步檢驗(yàn)就判定年齡為0周歲。
修改后的計(jì)算周歲的函數(shù):
//使用前提:參數(shù)strBirthday已經(jīng)是正確格式的2007-02-09這樣的日期字符串(年份必須是完整年份)function jsGetAge(strBirthday) { var returnAge; var strBirthdayArr=strBirthday.split("-"); var birthYear = strBirthdayArr[0]; var birthMonth = strBirthdayArr[1]; var birthDay = strBirthdayArr[2]; d = new Date(); var nowYear = d.getFullYear(); var nowMonth = d.getMonth() + 1; var nowDay = d.getDate() if(nowYear == birthYear) { if(birthMonth<nowMonth) returnAge=0;//同年月份為今月前,0歲 else if(birthMonth==nowMonth && birthDay<=nowDay) returnAge = 0;//同年同月日期為今天前 0歲 else returnAge = -1;//同年同月但日為今天后或今月后,日期無(wú)效 } else { var ageDiff = nowYear - birthYear ; //年之差 if(ageDiff > 0) { if(nowMonth == birthMonth) { var dayDiff = nowDay - birthDay;//日之差 if(dayDiff < 0) { returnAge = ageDiff - 1; } else { returnAge = ageDiff ; } } else { var monthDiff = nowMonth - birthMonth;//月之差 if(monthDiff < 0) { returnAge = ageDiff - 1; } else { returnAge = ageDiff ; } } } else { returnAge = -1;//返回-1 表示出生日期輸入錯(cuò)誤 晚于今天 } } return returnAge;//返回周歲年齡}

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
看到你的代碼里jsGetAge方法的計(jì)算邏輯實(shí)在太啰嗦,我就想來(lái)簡(jiǎn)化一下,所以得到第一個(gè)方法:
方法1
function jsGetAge(strBirthday) { var yTime = 365*24*60*60*1000, bTime = new Date(strBirthday).getTime(), nTime = new Date().getTime(); return Math.floor((nTime-bTime)/yTime); } alert(jsGetAge('1984-3-2'))
但這個(gè)方法存在一個(gè)BUG,因?yàn)椴⒉皇敲磕甓际?65天,所以這里算出來(lái)的年齡會(huì)有一定的差距;
于是我繼續(xù)改進(jìn)有了第二個(gè)方法:
方法二
function jsGetAge(strBirthday) { var bDay = new Date(strBirthday), nDay = new Date(), nbDay = new Date(nDay.getFullYear(),bDay.getMonth(),bDay.getDate()), age = nDay.getFullYear() - bDay.getFullYear(); if (bDay.getTime()>nDay.getTime()) {return '日期有錯(cuò)'} return nbDay.getTime()<=nDay.getTime()?age:--age; } alert(jsGetAge('1984-3-2'))
這里增加了一個(gè)生日日期大于今天的錯(cuò)誤提示,通過(guò)計(jì)算今年生日和今天的時(shí)間差來(lái)判定由年份計(jì)算來(lái)的時(shí)間是否要減1;
經(jīng)過(guò)簡(jiǎn)單測(cè)試感覺(jué)邏輯上應(yīng)該沒(méi)問(wèn)題了。
添加回答
舉報(bào)