2 回答

TA貢獻(xiàn)1875條經(jīng)驗 獲得超5個贊
不好意思,經(jīng)過仔細(xì)查看和修改,問題已經(jīng)得到解決。在此總結(jié)一下以供其他人借鑒:
1.function jsGetAge(strBirthday)函數(shù)的位置沒有問題,可寫在$(document).ready(function() {}中或外部。
2.問題產(chǎn)生的原因是我的頁面同時加載了其他js,加載速度較慢,導(dǎo)致click函數(shù)無法快速加載,因此誤以為沒有效果。實際上是有效果的。
3.大家不要直接使用這個根據(jù)生日日期計算周歲的函數(shù),這個函數(shù)存在問題,沒有對同年進(jìn)行進(jìn)一步檢驗就判定年齡為0周歲。
修改后的計算周歲的函數(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;//同年同月但日為今天后或今月后,日期無效 } 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 表示出生日期輸入錯誤 晚于今天 } } return returnAge;//返回周歲年齡}

TA貢獻(xiàn)1821條經(jīng)驗 獲得超6個贊
看到你的代碼里jsGetAge方法的計算邏輯實在太啰嗦,我就想來簡化一下,所以得到第一個方法:
方法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'))
但這個方法存在一個BUG,因為并不是每年都是365天,所以這里算出來的年齡會有一定的差距;
于是我繼續(xù)改進(jìn)有了第二個方法:
方法二
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 '日期有錯'} return nbDay.getTime()<=nDay.getTime()?age:--age; } alert(jsGetAge('1984-3-2'))
這里增加了一個生日日期大于今天的錯誤提示,通過計算今年生日和今天的時間差來判定由年份計算來的時間是否要減1;
經(jīng)過簡單測試感覺邏輯上應(yīng)該沒問題了。
添加回答
舉報