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
相关产品推荐
相关产品推荐

