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

hgb9j2n6  于 2023-09-29  发布在  PHP
关注(0)|答案(4)|浏览(133)

当我们传递一个像这样的日期值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设置一个mutator,将这个2019-01-01 00:00:00转换为这个2019-01-01 23:59:00

qnakjoqk

qnakjoqk1#

只需使用以下命令:

$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();
}
9jyewag0

9jyewag02#

您可以使用类似strtotime()函数的方法向当前时间戳添加内容。$expiry_date = date("Y-m-d H:i:s", strtotime('+5 hours'))
如果你需要函数中的变量,你必须使用双引号,然后像strtotime(“+{$hours} hours”),但是更好的是使用strtotime(sprintf("+%d hours", $hours))

nnsrf1az

nnsrf1az3#

我使用了一个DateTime属性方法,如下所示:

date_create($your_date)->modify('+1 day -1 microsecond'),

它在Laravel上工作,因为datetime是PHP原生的。
-> Source <-

pgpifvop

pgpifvop4#

硬编码一天中的时间
$expiry_date = $your_date->format(“年月日23:59:00”);

相关问题