使用PHP从出生日期到年龄范围


Date of birth to Age range using PHP

我有一个表,存储我的客户姓名和出生日期。例如:

name       DOB          gender      email
Tony       1987-04-20   male        tony@tony.com
Susan      1985-06-13   female      susan@susan.com

在我的网站上,我想根据他们的出生日期搜索用户,并显示为年龄范围,如下图所示(18岁以下、18-25岁、26-35岁、36-45岁、46-55岁和55岁以上)

对于托尼和苏珊来说,他们将属于26-35的类别。在我的网站上,我希望有一个按年龄范围显示姓名的表格,如下所示。

Under 18   18-25   26-35   36-45   46-55   Over 55
xxx        xxx     Tony    xxx     xxx     xxx
xxx        xxx     Susan   xxx     xxx     xxx

使用PHP,我如何从D.O.B中找到年龄范围?

我有一个例子,这样你就可以了解如何进行

步骤:1

 SELECT 
   round(DATEDIFF(CURRENT_DATE,t.birthdate)/365) AS ageInYears,
   name 
 FROM member t

从表成员获取姓名和年龄

步骤:2

SELECT
   (`ageInYears` > 40) as `data1`
   ,name 
  FROM  (step: 1) as t

创建的列"data1"年龄>40,您可以在年龄比较上创建多个列,如(ageInYears<18)作为data1,(ageInYears>18和ageInYears<25)作为data2

步骤:3

SELECT 
     MAX(IF(`data1` = 1,name,null)) '35to40',
     MAX(IF(`data1` = 0,name,null)) '0to35'
     From (step 2) as t group by name

使用if条件创建列35to40和0to35,以检查"data1"=1的位置,如果不是1,则将其名称放在空之外

最终结果

 SELECT 
 MAX(IF(`data1` = 1,name,null)) '35to40',
 MAX(IF(`data1` = 0,name,null)) '0to35'
 From (SELECT 
         (`ageInYears` > 40) as `data1`
         ,name 
             from ( SELECT
                round(DATEDIFF(CURRENT_DATE,t.birthdate)/365) AS ageInYears
                ,name 
                    FROM member t) as t) as t group by name

o/p

 35to40     0to35   
NULL    asdasd
dhara   NULL
NULL    g
ravi    NULL
sonam   NULL

尝试以下代码

        foreach($rows as $row){
            $d1 = new DateTime($row->DOB);
            $d2 = new DateTime(date("Y-m-d"));
            $diff = $d2->diff($d1);
            echo $diff->y;
        }