在 laravel 中设置一天结束而不是 00:00:00

Tan*_*may 5 php datetime laravel php-carbon

当我们传递这样一个2019-01-01没有时间的日期值时10:00:00,时间默认为00:00:00. 所以最后 db 兼容值被转换成这个:2019-01-01 00:00:00。我怎样才能强制默认它23:59:00呢?

示例:我需要设置一个expiry_date属性,但如果我只接受2019-01-08用户输入的日期,用户将假设他们将一整天作为到期日期,而实际上它会在第一秒到期,2019-01-08因为的隐式默认时间00:00:00

我如何克服这个问题?我怎样才能设置一个mutator来expiry_date把它2019-01-01 00:00:00变成这个2019-01-01 23:59:00

Chr*_*aal 6

只需使用以下内容:

$expiryDate = Carbon::createFromFormat('Y-m-d', $date)->endOfDay()->toDateTimeString();
Run Code Online (Sandbox Code Playgroud)

这将获取日期(如果需要,更新日期格式),切换到一天结束并将结果对象转换为日期时间字符串。

或者,将其用作属性设置器:

/**
 * @param $value
 */
public function setExpiryDateAttribute($value)
{
    $this->attributes['expiry_date'] = Carbon::createFromFormat('Y-m-d', $value)
        ->endOfDay()
        ->toDateTimeString();
}
Run Code Online (Sandbox Code Playgroud)