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

问题描述 投票:0回答:4

当我们传递像这样的日期值

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

php laravel datetime php-carbon
4个回答
9
投票

只需使用以下内容:

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

1
投票

您可以使用类似 strtotime() 函数的东西来向当前时间戳添加一些内容。

$expiry_date = date("Y-m-d H:i:s", strtotime('+5 hours'))

如果函数中需要变量,则必须使用双引号,例如 strtotime("+{$hours} hours"),但是最好使用

strtotime(sprintf("+%d hours", $hours))


1
投票

我使用了如下所示的 DateTime 属性方法:

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

它适用于 Laravel,因为日期时间是 PHP 原生的。

-> 来源 <-


0
投票

只需硬编码一天中的时间:

$expiry_date = 日期("年月日 23:59:00")

© www.soinside.com 2019 - 2024. All rights reserved.