我想让这个代码来计算年龄从一个字段的形式。
<?php
$birthDate = "$dob";
$birthDate = explode("-", $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;
?>
但是我不能让它使用YYYY-MM-DD的输入格式。
如果我将$dob更改为PHP使用的eu标准格式的日期,它会像魅力一样工作。
是否有一些简单的方法来纠正这个问题?
一定要小心使用日期符号。年、月、日的顺序)。
这是工作(原代码改编):
<?php
$birthDate = "1984-05-21";
$birthDate = explode("-", $birthDate);
$age = (date("md", date("U", mktime(0, 0, 0, $birthDate[2], $birthDate[1], $birthDate[0]))) > date("md") ? ((date("Y")-$birthDate[0])-1):(date("Y")-$birthDate[0]));
echo "Age is: ".$age;
?>
使用DateTime::diff
函数
<?php
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2013-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%y years');
?>
使用strtotime($dob)
获取时间戳。然后以人类的方式计算年龄:
list($dob_year, $dob_date) = explode('-', date('Y-md', strtotime($dob)));
list($cur_year, $cur_date) = explode('-', date('Y-md'));
$age = $cur_year - $dob_year - ($dob_date >= $cur_date ? 0 : 1);