我必须通过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));
}
}
?>
我还希望能够增加十年并减去十年。
答案 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);
}