-5

我必须通过 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));
}

}

?>

我也希望能够加十年减十年。

4

2 回答 2

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 位数的年份。

忽略丑陋的语法,这只是为了解释每一位的作用。

于 2013-06-17T20:53:16.150 回答
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);
}
于 2013-06-17T20:46:26.610 回答