当我们传递像这样的日期值
2019-01-01
而不带时间10:00:00
时,时间默认为00:00:00
。所以最后数据库兼容值被转换成这样: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
?
只需使用以下内容:
$expiryDate = Carbon::createFromFormat('Y-m-d', $date)->endOfDay()->toDateTimeString();
这将获取日期(如果需要,更新日期格式),切换到当天结束并将结果对象转换为日期时间字符串。
或者,将其用作属性设置器:
/**
* @param $value
*/
public function setExpiryDateAttribute($value)
{
$this->attributes['expiry_date'] = Carbon::createFromFormat('Y-m-d', $value)
->endOfDay()
->toDateTimeString();
}
您可以使用类似 strtotime() 函数的东西来向当前时间戳添加一些内容。
$expiry_date = date("Y-m-d H:i:s", strtotime('+5 hours'))
。
如果函数中需要变量,则必须使用双引号,例如 strtotime("+{$hours} hours"),但是最好使用
strtotime(sprintf("+%d hours", $hours))
。
我使用了如下所示的 DateTime 属性方法:
date_create($your_date)->modify('+1 day -1 microsecond'),
它适用于 Laravel,因为日期时间是 PHP 原生的。
只需硬编码一天中的时间:
$expiry_date = 日期("年月日 23:59:00")