美文网首页PHP经验分享
php计算年龄算法,包含年月天数

php计算年龄算法,包含年月天数

作者: 刘小白DOER | 来源:发表于2020-08-21 06:32 被阅读0次

    用bootstrap、php给小孩写了个人网页,目前部署在树莓派上。后续功能添加年龄显示在主页上面,包含年龄、月数、天数,同时在生日那天在年龄后打印出生日快乐。最开始的想法是两个年龄相减得到age,但是月数和天数就麻烦了。

    <?php

functionbirthday($birthday){

 $age= strtotime($birthday);

 if($age=== false){

  returnfalse;

 }

 list($y1,$m1,$d1) = explode("-",date("Y-m-d",$age));

 $now= strtotime("now");

 list($y2,$m2,$d2) = explode("-",date("Y-m-d",$now));

 $age= $y2- $y1;

 if((int)($m2.$d2) < (int)($m1.$d1))

  $age-= 1;

 return$age;

}

echobirthday('1986-07-22');

?>

    幸亏有万能的网友,把源代码输出数组修改后为字符串输出,直接打印就ok了。算法中,是在类CalAge中定义三个函数,getAge是public,_getMD、_getMothDay是private。not_birth参数是说明是否生日,转换成字符串组装在年龄后面。

    <?php

class CalAge {

   public function getAge($byear, $bmonth, $bday) {

        $year = date('Y');

        $month = date('m');

        $day = date('d');

        $bmonth = intval($bmonth);

        $bday = intval($bday);

        if ($bmonth < 10) {

            $bmonth = '0' . $bmonth;

        }

        if ($bday < 10) {

            $bday = '0' . $bday;

        }

        $bi = intval($byear . $bmonth . $bday);

        $ni = intval($year . $month . $day);

        $not_birth = 0;

        if ($bi > $ni) {

            $not_birth =1;

            $tmp = array($byear, $bmonth, $bday);

            list($byear, $bmonth, $bday) = array($year, $month, $day);

            list($year, $month, $day) = $tmp;

            list($bi, $ni) = array($ni, $bi);

        }

        $years = 0;

        while (($bi + 10000) <= $ni) {//先取岁数

            $bi += 10000;

            $years++;

            $byear++;

        }//得到岁数后 抛弃年

        list($m, $d) = $this->_getMD(array($year, $month, $day), array($byear, $bmonth, $bday));

        if($not_birth==1)

        $shengri="生日快乐";

        else

        $shengri="";

        return $years."岁".$m."月".$d."天".$shengri;

    }

    private function _getMD($ymd, $bymd) {

        list($y, $m, $d) = $ymd;

        list($by, $bm, $bd) = $bymd;

        if (($m . $d) < ($bm . $bd)) {

            $m +=12;

        }

        $month = 0;

        while ((($bm . $bd) + 100) <= ($m . $d)) {

            $bm++;

            $month++;

        }

        if ($bd <= $d) {//同处一个月

            $day = $d - $bd;

        } else {//少一个月

            $mdays = $bm > 12 ? $this->_getMothDay(++$by, $bm - 12) : $this->_getMothDay($by, $bm);

            $day = $mdays - $bd + $d;

        }

        return array($month, $day);

    }

   private function _getMothDay($year, $month) {

        switch ($month) {

            case 1:

            case 3:

            case 5:

            case 7:

            case 8:

            case 10:

            case 12:

                $day = 31;

                break;

            case 2:

                $day = (intval($year % 4) ? 28 : 29); //能被4除尽的为29天其他28天

                break;

            default:

                $day = 30;

                break;

        }

        return $day;

    }

}

?>

    在主页面插入php调用楼上的php文件中getAge 函数,打印出年月天数。

<?php

require "cal_age.php";

$ca = new CalAge();

echo $ca->getAge('2020', '06', '04');

?>

相关文章

网友评论

    本文标题:php计算年龄算法,包含年月天数

    本文链接:https://www.haomeiwen.com/subject/hamyjktx.html