Excel中最精确的计算年龄的公式

Stella981
• 阅读 615

身份证算年龄

假设A1是身份证号所在单元格

=IF(MONTH(NOW())<INT(MID(A1,11,2)),INT(YEAR(NOW())-INT(MID(A1,7,4)))-1,IF(MONTH(NOW())>INT(MID(A1,11,2)),YEAR(NOW())-INT(MID(A1,7,4)),IF(DAY(NOW())>=INT(MID(A1,13,2)),YEAR(NOW())-INT(MID(A1,7,4)),YEAR(NOW())-INT(MID(A1,7,4))-1)))

Excel中最精确的计算年龄的公式 1、计算出生日期到某一指定日期(一般选用某年的最后一天入2006年12月31日)的的天数,然后除以360 ,得到一个数值,然后用 int()函数取整,得出需要的年龄。一般使用的公式如下: =IF(C12="","",INT(DAYS360(C12,"2006-12-31")/360)) =IF(C12="","",INT(DAYS360(C12,TODAY())/360)) 这个方法,这个公式的弊端在于,一、将每个月默认为30天去计算两个日期之间的天数,二、将每年默认为360天去计算年龄。这种方法显然不精确。 2、年份直接相减 计算周岁 =YEAR(NOW())-YEAR(C12) =(TODAY()-出生日期单元格)/365(常用) 计算虚岁 =YEAR(NOW())-YEAR(C12)+1 这种算法的精确程度显而易见,粗略估算还算可以。 3、使用DATEDIF函数 这种方法与第一种方法采用了相同的思路,但是其的精确程度显然比第一种方法要高,这取决于DATEDIF函数本身的精确性。 =IF(C12="","",INT(DATEDIF(C12,"1983-3-20","D")/365)) 或者, =IF(C12="","",INT(DATEDIF(C12,now(),"D")/365)) 但是这种方法强行将一年固定为365天,我们知道通常情况每个四年就有一年是366天所以这种算法也不是很精确。 通过认真分析,我觉得只有结合我们计算年龄的实际方法,才能编制出准确无误的公式。首先分析人们计算年龄的方法,例如,笔者系1983年3月20日生人,如果要在2007年3月23日这天计算他的年龄,通常采用这样的方法。首先,人们会用2007减去1983得出的年龄为24岁,然后再看看他“满没满”24岁,就是看看出生的月份和日期比今天早还是晚,如果出生日期晚于今天则表示没有满,那么他的年龄就应该是2007-1983-1=23岁。如果出生日期早于今天或者就是今天,就说明他已经满了24岁或者正好满24岁,则他的年龄就是2007-1983=24岁。分析清楚了计算年龄的过程我们再根据这个过程编写公式就很容易了。 综上,我编写了如下公式,在实际应用中将公式中所有的C12替换为,你的所使用的出生日期所在的表格行号列号组合即可。如(A1,B2等等) =IF(MONTH(NOW())<MONTH(C12),INT(YEAR(NOW())-YEAR(C12))-1,IF(MONTH(NOW())>MONTH(C12),YEAR(NOW())-YEAR(C12),IF(DAY(NOW())>=DAY(C12),YEAR(NOW())-YEAR(C12),YEAR(NOW())-YEAR(C12)-1))) 公式说明

=IF ( MONTH(NOW())<MONTH(C12) , INT(YEAR(NOW())-YEAR(C12))-1 , //如果当前日期的月份小于所需计算日期的月份,则表示今年没有过生日,年龄数为YEAR(NOW())-YEAR(C12)-1,如果不是这种情况,进入下面的判断 IF ( MONTH (NOW())>MONTH(C12) , YEAR(NOW())-YEAR(C12) , //如果当前日期的月份大于所需计算日期的月份,则表示今年已经过生日,年龄数为YEAR(NOW())-YEAR(C12),如果也不是这种情况,则表示这两个月份相等,进入下面的判断过程去判断,日期的情况。 IF ( DAY(NOW())>=DAY(C12) , YEAR(NOW())-YEAR(C12) , //如果今天的日期大于或者等于出生年月日中的日期,则表示已经过了生日,或者正在过生日,则年龄数为YEAR(NOW())-YEAR(C12),否则表示今年没有过生日,年龄数应该选择下面的公式,大小为YEAR(NOW())-YEAR(C12)-1)))

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java8 获取当前时间戳
1、使用LocalDateTime架包 LocalDatelocalDateLocalDate.now();TimestamptimestampTimestamp.valueOf(LocalDateTime.now());System.out.println(timestamp.getTime());
Wesley13 Wesley13
2年前
mysql获取7天前数据,日期比较
select\fromnewswheren\_dateunix\_timestamp(subdate(now(),interval7day))orderbyn\_click desc  N天内记录WHERETO\_DAYS(NOW())TO\_DAYS(
Stella981 Stella981
2年前
Python基础之格式化输出、运算符、数字与布尔值互换以及while...else
python是一天学一点,就这样零零碎碎……格式化输出  %是占位符,%s是字符串格式,%d整数格式,%f是浮点数格式1nameinput('输入姓名')2ageinput('输入年龄')3str'年龄:%d,姓名:%s'%(int(age),name)4str
Stella981 Stella981
2年前
JVM 字节码指令表
字节码助记符指令含义0x00nop什么都不做0x01aconst\_null将null推送至栈顶0x02iconst\_m1将int型1推送至栈顶0x03iconst\_0将int型0推送至栈顶0x04iconst\_1将int型1推送至栈顶0x05ic
Wesley13 Wesley13
2年前
mysql select将多个字段横向合拼到一个字段
表模式:CREATE TABLE tbl_user (  id int(11) NOT NULL AUTO_INCREMENT,  name varchar(255) DEFAULT NULL,  age int(11) DEFAULT NULL,  PRIMARY KEY (id)
Stella981 Stella981
2年前
Impala常用函数索引
增加X自然天selectdays_add(now(),2)字符串转Timestampselectto\_timestamp('2019101420:00:01','yyyyMMddHH:mm:ss');注意,Impala的timestamp的标准是ISO8601 参考:https://en.wiki
Wesley13 Wesley13
2年前
PHP中的NOW()函数
是否有一个PHP函数以与MySQL函数NOW()相同的格式返回日期和时间?我知道如何使用date()做到这一点,但是我问是否有一个仅用于此的函数。例如,返回:2009120100:00:001楼使用此功能:functiongetDatetimeNow(){
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
5个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这