用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');
?>
网友评论