首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP计算年龄

PHP计算年龄
EN

Stack Overflow用户
提问于 2010-09-23 16:49:11
回答 30查看 307.5K关注 0票数 177

我正在寻找一种计算一个人的年龄的方法,给定一个人的道布的格式为dd/mm/yyyy。

我正在使用下面的函数,它在几个月内一直工作得很好,直到某种故障导致while循环永远不会结束,并使整个网站陷入停顿。由于每天有近100,000个DOB使用此功能数次,因此很难确定是什么原因造成了这种情况。

有没有人有更可靠的计算年龄的方法?

代码语言:javascript
复制
//replace / with - so strtotime works
$dob = strtotime(str_replace("/","-",$birthdayDate));       
$tdate = time();

$age = 0;
while( $tdate > $dob = strtotime('+1 year', $dob))
{
    ++$age;
}
return $age;

编辑:此函数有时似乎工作正常,但对于1986年9月14日的道布,返回"40“

代码语言:javascript
复制
return floor((time() - strtotime($birthdayDate))/31556926);
EN

回答 30

Stack Overflow用户

回答已采纳

发布于 2010-09-23 17:07:53

这可以很好地工作。

代码语言:javascript
复制
<?php
  //date in mm/dd/yyyy format; or it can be in other formats as well
  $birthDate = "12/17/1983";
  //explode the date to get month, day and year
  $birthDate = explode("/", $birthDate);
  //get age from date or birthdate
  $age = (date("md", date("U", mktime(0, 0, 0, $birthDate[0], $birthDate[1], $birthDate[2]))) > date("md")
    ? ((date("Y") - $birthDate[2]) - 1)
    : (date("Y") - $birthDate[2]));
  echo "Age is:" . $age;
?>
票数 207
EN

Stack Overflow用户

发布于 2010-09-23 17:06:34

代码语言:javascript
复制
$tz  = new DateTimeZone('Europe/Brussels');
$age = DateTime::createFromFormat('d/m/Y', '12/02/1973', $tz)
     ->diff(new DateTime('now', $tz))
     ->y;

从PHP5.3.0开始,您可以使用方便的DateTime::createFromFormat来确保日期不会被误认为m/d/Y格式,并使用DateInterval类(通过DateTime::diff)来获取从现在到目标日期之间的年数。

票数 187
EN

Stack Overflow用户

发布于 2010-09-23 16:55:41

代码语言:javascript
复制
 $date = new DateTime($bithdayDate);
 $now = new DateTime();
 $interval = $now->diff($date);
 return $interval->y;
票数 142
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3776682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档