通过OOP进行年龄计算

时间:2013-06-17 20:39:11

标签: php oop

我必须通过PHP中的OOP将年龄计算功能添加到类文件中。输入格式为mm / dd / yyyy。

我的代码有点工作,但它没有给我正确的结果。我该如何解决?

<?php 

class user {

public $firstName;
public $lastName;
public $birthDate;
public function setfirstName($firstName) {
    $this->firstName = $firstName;
}
public function getfirstName() {
return $this->firstName;
}

public function setlastName($lastName) {
$this->lastName = $lastName;
}
public function getlastName() {
return $this->lastName;
}

public function setbirthDate($birthDate) {
$this->birthDate = $birthDate;
}
public function getbirthDate() {
return $this->birthDate;
}

public function getAge() { 
return intval(substr(date('mmddyyyy') - date('mmddyyyy', strtotime($this->birthDate)), 0, -4));
}

}

?>

我还希望能够增加十年并减去十年。

2 个答案:

答案 0 :(得分:2)

您可以使用DateTime类轻松操作日期。我已将$dateFormat放在方法之外,因为如果您认为合适,也可以使用它来验证setBirthDate中的输入。

protected $dateFormat = 'm/d/Y';

public function getAge()
{
    // Create a DateTime object from the expected format
    return DateTime::createFromFormat($this->dateFormat, $this->birthDate)

        // Compare it with now and get a DateInterval object
        ->diff(new DateTime('now'))

        // Take the years from the DateInterval object
        ->y; 
}

请注意,我使用m/d/Y作为日期格式,因为根据评论,mm/dd/yyyy没有达到预期效果。例如,Y是4位数年份。

忽略丑陋的语法,我只能这样解释每个位的作用。

答案 1 :(得分:0)

首先,我会更改setBirthday方法以确保保存的字段是日期。在getAge中,你必须进行简单的计算,而不必将某些东西转换成字符串转换为int或其他东西。

获取当前时间减去生日,你应该得到正确的答案。不幸的是,我不能提供更多细节,因为我已经离开了PHP世界,但它应该是这样的。

检查出来:http://php.net/manual/en/function.date-diff.php

第一个参数应该是当前时间,第二个参数应该是生日

public function getAge() {
  $now = new DateTime();
  $interval = $this->birthDate->diff($now);
  return $interval->format('%Y');
}

setBirthdat应如下所示:

public function setbirthDate($birthDate) {
  $this->birthDate = new DateTime($birthDate);
}