You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Carbon实现逝者年龄计算(非当前年龄)方案

处理包含逝者的年龄计算问题

平时在Laravel项目里,我们要获取用户的当前年龄,通常会写这样的访问器代码:

// Accessor for Age.
public function getAgeAttribute() {
    return Carbon::parse($this->attributes['birth_date'])->age;
}

但如果遇到逝者的情况,数据库里的death_date字段要么是NULL(表示在世),要么是yyyy-mm-dd格式的死亡日期,这时候就需要调整逻辑——如果是逝者,要计算从出生日期到死亡日期的实际年龄,而不是到当前日期的年龄。

一开始可能会想到这样的逻辑框架:

// Accessor for Age.
public function getAgeAttribute() {
    if (!is_null($this->attributes['death_date'])) {
        // how to calculate death_date - birth_date = realAge
        return $realAge;
    }
    return Carbon::parse($this->attributes['birth_date'])->age;
}

其实不用这么麻烦,Carbon有个很实用的特性:当你解析NULL值时,它会自动转为当前时间。所以我们可以把代码简化成这样,一行逻辑就能覆盖两种情况:

// Accessor for Age.
public function getAgeAttribute() {
    // Carbon会自动将NULL转为当前时间,所以无需额外判断
    return Carbon::parse($this->attributes['birth_date'])
        ->diff(Carbon::parse($this->attributes['death_date']))
        ->format('%y');
}

这样一来,当death_date为NULL时,就相当于计算出生日期到当前时间的年龄;当death_date有具体值时,就计算出生日期到死亡日期的实际年龄,完美解决两种场景的需求。

内容的提问来源于stack exchange,提问作者kenken9999

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:18:38