PHP计算年龄精确到年月日

<?php

class CalAge {

    /*
     * 计算年龄精准到年月日
     * @param type $byear
     * @param type $bmonth
     * @param type $bday
     * @return type
     */
   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));
        return array($years, $m, $d, $not_birth);
    }

    /**
     * 只能用于一年内计算
     * @param type $ymd
     * @param type $bymd
     */
    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;
    }

}

$ca = new CalAge();
echo ‘<pre>‘;
print_r($ca->getAge(‘2015‘, ‘09‘, ‘18‘));
echo ‘</pre>‘;

  

时间: 2024-12-08 17:32:42

PHP计算年龄精确到年月日的相关文章

Java 根据年月日精确计算年龄

1 import java.text.SimpleDateFormat; 2 import java.util.Calendar; 3 import java.util.Date; 4 5 /** 6 * Created by qing on 2017/3/28. 7 */ 8 public class AgeUtils { 9 // 根据年月日计算年龄,birthTimeString:"1994-11-14" 10 public static int getAgeFromBirthT

JS根据身份证号码精确计算年龄和性别

1 /** 2 * 根据身份证号得到姓别和精确计算年龄 3 */ 4 function analyzeIDCard(IDCard){ 5 var sexAndAge = {}; 6 //获取用户身份证号码 7 var userCard = IDCard; 8 //如果身份证号码为undefind则返回空 9 if(!userCard){ 10 return sexAndAge; 11 } 12 //获取性别 13 if(parseInt(userCard.substr(16,1)) % 2 ==

通过出生年月日按要求计算年龄的算法

最近项目里碰到个需求,有关于出生年月日计算年龄的,无奈网上搜了搜,感觉都不满足客户的需求只得自己动手了. 不废话,上需求 上算法: 类似于上面这个 yyyy-MM-dd 给一个这个值 算出来了多大年龄 l 不足一月新生儿显示日龄.2 不足一年婴幼儿显示月龄+日龄,如3个月12天.3 超过1周岁到12周岁,显示年龄+月龄,如12岁3个月. public static String getAgeAchen(Context context, Calendar birthday, Calendar no

java 根据生日计算年龄

根据生日计算年龄可以通过Calendar实现.最简单可以考虑get(Calendar.DAY_OF_YEAR)来简单修正年龄,但是遇到生日在闰年的2月29之后,或者今年是闰年的2月29之后可能出现计算不准,误差一天.所以还是老实判断年月日好了. // 根据生日计算年龄,判断了年月日,比简单的年份上计算更精准 public static int getAge(Date birthDay) throws Exception {         Calendar cal = Calendar.getI

java计算年龄

精确到天计算年龄 public static int getAgeByCardId(String card) throws Exception { Integer len = card.length(); if (len == CHINA_ID_MIN_LENGTH) { card = conver15CardTo18(card); } String birthDate = card.substring(6, 14); SimpleDateFormat sdf = new SimpleDateF

根据生日计算年龄

/*      * 根据生日计算年龄     */    public int age(String birthDate) {        SimpleDateFormat dft=new SimpleDateFormat("yyyy-MM-dd");        Date time = null;        //类型转换        try {            time=dft.parse(birthDate);        } catch (ParseExcept

iOS 获取当前时间以及计算年龄(时间差)

获取当前时间 NSDate *now = [NSDate date]; NSLog(@"now date is: %@", now); NSCalendar *calendar = [NSCalendar currentCalendar]; NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarU

计算一个人的年龄(年月日时分秒),有不对的地方希望大家指出!

想想我们可以做一个计时器,记录一下我们走过了多少时光.看了一下网上别人的一些代码,记录年月的都并不科学,甚至很麻烦,自己倒腾了一上午,总算弄出来了一个. 自己觉得还比较科学,暂时没有发现BUG,如果哪里有错,希望大家指出来! 上代码: <!doctype html><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&

java根据身份证计算年龄

/** * 根据身份证计算年龄 * * @param idcard * @return */ public static Integer idCardToAge(String idcard) { Integer selectYear = Integer.valueOf(idcard.substring(6, 10)); //出生的年份 Integer selectMonth = Integer.valueOf(idcard.substring(10, 12)); //出生的月份 Integer