计算孩子当下几岁几个月几天的办法

时间:2024-01-23 10:58:46

>>>原创,转载请注明出处!

场景:根据孩子生日:1:求当前几岁几个月几天,2)求在指定月份段的接种疫苗时间,和当前距离接种疫苗时间还有几天。

方法1:(以数据库为mysql为例),直接用数据库现成函数算,比在java代码里算方便。

  1)求当前几岁几个月几天:

  SELECT id, DATE(birthday) AS birthday,
  TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS years, --x岁
  TIMESTAMPDIFF(MONTH, birthday, CURDATE())%12 AS months, --x个月
  TIMESTAMPDIFF(DAY, DATE(DATE_SUB(birthday,INTERVAL -TIMESTAMPDIFF(MONTH, birthday, CURDATE()) MONTH)), CURDATE()) AS beyond_day --x天
  FROM table
  WHERE id= '1';

  2) 求在指定月份段的要打针的时间,和当前距离打针时间还有几天。
  SELECT id,DATE(birthday) AS birthday,DATE_SUB(birthday,INTERVAL - 1 MONTH) AS planTime,DATEDIFF(DATE_SUB(birthday,INTERVAL - 1 MONTH),NOW()) AS countDy
  FROM table
  WHERE id= '1';

==============================================================

==============================================================

方法2:(以java为例)放程序里算感觉很绕,这里只分享思路

  if(当前年份<生日年份){ 

   log.info(“生日数据错误!”);

  }else if(当前年份==生日年份){ //同年

   log.info("同年");

   if(当前月份<生日月份){ //

    log.info(“生日数据错误!”);

   }else if(当前月份==生日月份){// 同年同月

    if(当前天<生日天){

      log.info(“生日数据错误!”);

    }else if(当前天==生日天){{// 同年同月同日

    }else if(当前天>生日天){{// 同年同月不同日

    }  

   }else if(当前月份>生日月份){//   同年不同月

    if(当前天<生日天){//不满整月

      

    }else if(当前天==生日天){{// 同年不同月同日

 

    }else if(当前天>生日天){{// 同年同月不同日

 

    }

   }

  }else if(当前年份>生日年份){ //不同年

   log.info("不同年");

     if(当前月份<生日月份){//不满整年

 

   }else if(当前月份==生日月份){//满整年

 

   }else if(当前月份>生日月份){//满整年

 

   }

  }

-----------------------------------------------------------------------------------------------

还要考虑各个月份天数:(31、30、29、28);

(1、3、5、7、8、10、12)月 >> 31天

(4、6、9、11)月 >> 30天

(2)月 >> 平年28天,闰年29天。

-----------------------------------------------------------------------------------------------

总之,觉得放代码里算,要考虑的临界条件有些多,个人喜欢用第1中方法。

如果哪位朋友有放代码里计算的好的算法,欢迎交流推荐。

###############################################################

个人微信公众订阅号:IT知更鸟   (欢迎关注~)