`
huttoncs
  • 浏览: 198804 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于根据出生日期计算年龄的问题(js,java)

阅读更多
js中计算年龄
/**
* 将生日转换成年龄
*/
function birthDayToAge(){
var aDate=new Date();
var thisYear = aDate.getFullYear();
var thisMonth = aDate.getMonth()+1;
var thisDay = aDate.getDate();
var currentDate = thisYear+"-"+thisMonth+"-"+thisDay;
var oTable = document.getElementById('familyMember');
var message = $("#message").html();
if(message != null && message != "" ){
return null;
}
for(i=1;i<oTable.rows.length;i++){
    var cell = oTable.rows[i].cells[3].innerHTML;
    if(cell!="" && cell != null){
    age = daysBetween(currentDate,cell.trim());
    oTable.rows[i].cells[3].innerHTML = age;
    }else{
    oTable.rows[i].cells[3].innerHTML = "";
    }
}
}

/** 计算两个日期间的年龄  */
function daysBetween(DateOne,DateTwo){  
    var OneMonth = DateOne.substring(5,DateOne.lastIndexOf ('-')); 
    var OneDay = DateOne.substring(DateOne.length,DateOne.lastIndexOf ('-')+1); 
    var OneYear = DateOne.substring(0,DateOne.indexOf ('-')); 
 
    var TwoMonth = DateTwo.substring(5,DateTwo.lastIndexOf ('-')); 
    var TwoDay = DateTwo.substring(DateTwo.length,DateTwo.lastIndexOf ('-')+1); 
    var TwoYear = DateTwo.substring(0,DateTwo.indexOf ('-')); 
 
    var cha=((Date.parse(OneMonth+'/'+OneDay+'/'+OneYear)- Date.parse(TwoMonth+'/'+TwoDay+'/'+TwoYear))/86400000/365);  
   var age = Math.abs(cha)+1+"";
    return age.split(".")[0];
}


java中计算年龄
/** 计算年龄 */
public  String getAge(Date birthDay) throws Exception {
        Calendar cal = Calendar.getInstance();

        if (cal.before(birthDay)) {
            throw new IllegalArgumentException(
                "The birthDay is before Now.It's unbelievable!");
        }

        int yearNow = cal.get(Calendar.YEAR);
        int monthNow = cal.get(Calendar.MONTH)+1;
        int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);
       
        cal.setTime(birthDay);
        int yearBirth = cal.get(Calendar.YEAR);
        int monthBirth = cal.get(Calendar.MONTH);
        int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);

        int age = yearNow - yearBirth;

        if (monthNow <= monthBirth) {
            if (monthNow == monthBirth) {
                //monthNow==monthBirth
                if (dayOfMonthNow < dayOfMonthBirth) {
                    age--;
                }
            } else {
                //monthNow>monthBirth
                age--;
            }
        }

        return age +"";
    }
分享到:
评论
4 楼 RonQi 2015-10-24  
受博文启发,自己实现了下
	/**
	 * <pre>
	 * 从生日计算年龄:
	 * yearOfAge: 年龄超过1年的,计算满几年;
	 * monthOfAge: 年龄不满1年的,计算满几个月;
	 * dayOfAge: 年龄不满1月的,计算满几天;
	 * </pre>
	 * @param birthday
	 * @return 返回的Map中的key包含:yearOfAge, monthOfAge, dayOfAge
	 */
	public static Map<String, Integer> calAge(Date birthday){
		Map<String, Integer> result = new HashMap<String, Integer>();
		int yearOfAge = 0;
		int monthOfAge = 0;
		int dayOfAge = 0;
		
		Calendar cal = Calendar.getInstance();
		long nowMillis = cal.getTimeInMillis();
		long birthdayMillis = birthday.getTime();
		if(nowMillis < birthdayMillis){
			result.put("yearOfAge", yearOfAge);
			result.put("monthOfAge", monthOfAge);
			result.put("dayOfAge", dayOfAge);
			return result;
		}

		int yearNow = cal.get(Calendar.YEAR);
		int monthNow = cal.get(Calendar.MONTH) + 1;
		int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH);

		cal.setTime(birthday);
		int yearBirth = cal.get(Calendar.YEAR);
		int monthBirth = cal.get(Calendar.MONTH) + 1;
		int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);

		if(yearNow == yearBirth){
			monthOfAge = monthNow - monthBirth;
			if(monthNow == monthBirth){
				dayOfAge = dayOfMonthNow - dayOfMonthBirth;
			}else{
				if(dayOfMonthNow < dayOfMonthBirth){
					monthOfAge--;
				}
				if(monthOfAge == 0){
					dayOfAge = (int)TimeUnit.MILLISECONDS.toDays(nowMillis - birthdayMillis);
				}
			}
		}else{
			yearOfAge = yearNow - yearBirth;
			if(monthNow < monthBirth){
				yearOfAge--;
				if(yearOfAge == 0){
					monthOfAge = 12 - monthBirth + monthNow;
					if(dayOfMonthNow >= dayOfMonthBirth){
						monthOfAge++;
					}
				}
			}else if(monthNow == monthBirth){
				if(dayOfMonthNow < dayOfMonthBirth){
					yearOfAge--;
					if(yearOfAge == 0){
						monthOfAge = 11;
					}
				}
			}
		}

		result.put("yearOfAge", yearOfAge);
		result.put("monthOfAge", monthOfAge);
		result.put("dayOfAge", dayOfAge);
		return result;
	}
3 楼 accphc 2015-06-17  
/**
	 * 计算年龄
	 * @param birth yyyy-MM-dd
	 * @return
	 */
	public static int calcAge(String birth){
		Date nowDate= new Date();
		Date birthDate= parse(birth, "yyyy-MM-dd");
		Calendar flightCal= Calendar.getInstance();
		flightCal.setTime(nowDate);
		Calendar birthCal= Calendar.getInstance();
		birthCal.setTime(birthDate);
		
		int y= flightCal.get(Calendar.YEAR)-birthCal.get(Calendar.YEAR);
		int m= flightCal.get(Calendar.MONTH)-birthCal.get(Calendar.MONTH);
		int d= flightCal.get(Calendar.DATE)-birthCal.get(Calendar.DATE);
		if(y<0){
			throw new RuntimeException("您老还没出生");
		}
		
		if(m<0){
			y--;
		}
		if(m>=0&&d<0){
			y--;
		}

		return y;
	}
2 楼 小迹_ 2014-12-18  
生日获取月份时为什么不+1?
1 楼 桃花源记 2013-03-14  
虽然不难,但是归纳也需要时间的,赞一个!最后一个age++

相关推荐

Global site tag (gtag.js) - Google Analytics