3 回答
TA贡献1842条经验 获得超13个赞
我像这样修复你的函数:
function get_age($birthDate_old) {
return date_diff(
DateTime::createFromFormat('d/m/Y', $birthDate_old),
new DateTime('today')
)->y;
}
在你的情况下,你的日期格式不正确,因为 DateTime 构造函数不知道你是经过一个月还是一天。
05/04/1946 还可以。
26/01/1958 是不行的,因为 26 默认表示月份。
TA贡献1821条经验 获得超6个赞
据此:
https://www.php.net/manual/en/datetime.formats.php
// THIS IS INVALID, WOULD IMPLY MONTH == 19
$external = "19/10/2016 14:48:21";
// HOWEVER WE CAN INJECT THE FORMATTING WHEN WE DECODE THE DATE
$format = "d/m/Y H:i:s";
$dateobj = DateTime::createFromFormat($format, $external);
$iso_datetime = $dateobj->format(Datetime::ATOM);
echo "SUCCESS: $external EQUALS ISO-8601 $iso_datetime";
26 被视为月。因此,请像上面一样添加到您的日期。$format = "d/m/Y";
TA贡献1821条经验 获得超5个赞
问题是日期格式。我相信你正在“/”和“-”之间切换。如果您正在处理大数据,则很难修复整个数据库,因此我最好的建议是进行preg_replace,以便始终确保您从用户/数据库中获取的内容格式正确。在下面找到示例代码。
function get_age($birthDate_old) {
$birthDate = ($birthDate_old);
return date_diff(new DateTime($birthDate), new DateTime('today'))->y;
}
$birthDate = "26/01/1958";
$birthDate = preg_replace("(/)", "-", $birthDate);
echo get_age($birthDate);
我希望它有帮助!让我知道
- 3 回答
- 0 关注
- 189 浏览
添加回答
举报
