您的位置:首页 > Web前端 > JavaScript

Js年龄计算,精确到岁、月、小时

2016-01-27 01:13 447 查看
公司做医疗,需要根据时间获取精确年龄(主要是儿童年龄),精确度要求较高,从网上找了好久都不符合要
求,或者只是精确到岁,或者跨月时,天数误差过大,没办法只好自己写了一分,请大家指点

需求:
1 如果大于等于1岁,那么岁 例如格式"N岁N月" 如果整年,月数为0,格式为“N岁” 2 如果小于一岁,
但大于一月,就取几月 例如格式"N月N天",如果整月,天数为0,格式为“N月” 3 如果小于一个月,天大于等
于3天 直接取天数 如果天小于3天 取小时 例如出生2天 就取 48小时


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script language="javascript">
function getAge(beginStr, endStr) {
var reg = new RegExp(
/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})(\s)(\d{1,2})(:)(\d{1,2})(:{0,1})(\d{0,2})$/);
var beginArr = beginStr.match(reg);
var endArr = endStr.match(reg);

var days = 0;
var month = 0;
var year = 0;

days = endArr[4] - beginArr[4];
if (days < 0) {
month = -1;
days = 30 + days;
}

month = month + (endArr[3] - beginArr[3]);
if (month < 0) {
year = -1;
month = 12 + month;
}

year = year + (endArr[1] - beginArr[1]);

var yearString = year > 0 ? year + "岁" : "";
var mnthString = month > 0 ? month + "月" : "";
var dayString = days > 0 ? days + "天" : "";

/*
* 1
4000
如果岁 大于等于1 那么年龄取 几岁 2 如果 岁等于0 但是月大于1 那么如果天等于0
天小于3天 取小时
* 例如出生2天 就取 48小时
*/
var result = "";
if (year >= 1) {
result = yearString + mnthString;
} else {
if (month >= 1) {
result = days > 0 ? mnthString + dayString : mnthString;
} else {
var begDate = new Date(beginArr[1], beginArr[3] - 1,
beginArr[4], beginArr[6], beginArr[8], beginArr[10]);
var endDate = new Date(endArr[1], endArr[3] - 1, endArr[4],
endArr[6], endArr[8], endArr[10]);

var between = (endDate.getTime() - begDate.getTime()) / 1000;
days = Math.floor(between / (24 * 3600));
var hours = Math.floor(between / 3600 - (days * 24));
var dayString = days > 0 ? days + "天" : "";
result = days >= 3 ? dayString : days * 24 + hours + "小时";
}
}

return result;
}
alert(getAge("1980-03-22 10:1:2", "1982-03-22 10:1:2"));
alert(getAge("1980-02-29 10:1:2", "1981-03-01 10:12:2"));
alert(getAge("1980-03-22 10:1:2", "1980-03-23 9:1:1"));
alert(getAge("1981-02-28 10:1:2", "1981-03-01 10:1:2"));
</script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<body>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: