在 laravel 中设置一天结束而不是 00:00:00
Set end of day instead of 00:00:00 in laravel
当我们传递这样的日期值 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
.
我该如何克服这个问题?我如何为 expiry_date
设置一个突变器,将这个 2019-01-01 00:00:00
变成这个 2019-01-01 23:59:00
?
您可以使用 strtotime() 函数之类的东西向当前时间戳添加一些内容。 $expiry_date = date("Y-m-d H:i:s", strtotime('+5 hours'))
.
如果函数中需要变量,则必须使用双引号,然后使用 strtotime("+{$hours} hours"),但是最好使用 strtotime(sprintf("+%d hours", $hours))
。
只需使用以下内容:
$expiryDate = Carbon::createFromFormat('Y-m-d', $date)->endOfDay()->toDateTimeString();
这将获取日期(如果需要更新日期格式),切换到一天的结束并将生成的对象转换为日期时间字符串。
或者,将其用作属性 setter:
/**
* @param $value
*/
public function setExpiryDateAttribute($value)
{
$this->attributes['expiry_date'] = Carbon::createFromFormat('Y-m-d', $value)
->endOfDay()
->toDateTimeString();
}
当我们传递这样的日期值 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
.
我该如何克服这个问题?我如何为 expiry_date
设置一个突变器,将这个 2019-01-01 00:00:00
变成这个 2019-01-01 23:59:00
?
您可以使用 strtotime() 函数之类的东西向当前时间戳添加一些内容。 $expiry_date = date("Y-m-d H:i:s", strtotime('+5 hours'))
.
如果函数中需要变量,则必须使用双引号,然后使用 strtotime("+{$hours} hours"),但是最好使用 strtotime(sprintf("+%d hours", $hours))
。
只需使用以下内容:
$expiryDate = Carbon::createFromFormat('Y-m-d', $date)->endOfDay()->toDateTimeString();
这将获取日期(如果需要更新日期格式),切换到一天的结束并将生成的对象转换为日期时间字符串。
或者,将其用作属性 setter:
/**
* @param $value
*/
public function setExpiryDateAttribute($value)
{
$this->attributes['expiry_date'] = Carbon::createFromFormat('Y-m-d', $value)
->endOfDay()
->toDateTimeString();
}