20

我想在数据库中存储一个时间戳,时间分量为00:00:00.
以下代码:

$start_date = Carbon::createFromFormat('d-m-Y', $date_interval["start_date"]); 
$end_date = Carbon::createFromFormat('d-m-Y', $date_interval["end_date"]); 

当我只提供没有时间指定的日期时,将当前时间添加到日期中。
我需要这个,因为我需要从数据库中检索内部整数,这应该是一天的开始。

存储这个“一天的开始”的最佳方式是什么?

4 个回答 下面几个都是正确答案,注意红色部分

29

我通常在通话中设置日期,然后将时间重置为 00:00

Carbon::setTime(0, 0, 0);  // from the parent, DateTime class

在类中,还有一个 Carbon::startOfDay() 方法可以设置适当的值。

public function startOfDay()
{
    return $this->hour(0)->minute(0)->second(0);
}
31

为了安全起见,让 Carbon 使用->endOfDay()or决定一天的结束或开始->startOfDay()选择更适合您的。

Carbon::createFromFormat('d-m-Y', $date_interval["start_date"])->endOfDay();
Carbon::createFromFormat('d-m-Y', $date_interval["start_date"])->startOfDay();
1

Carbon::createFromFormat()与其父项不同,因为缺少的部分被设置为当前日期或时间而不是零。为了使其表现得像\DateTime::createFromFormat(),请使用|!格式字符,如手册(https://www.php.net/manual/en/datetime.createfromformat.php)中所述。

例子:

$midnight = Carbon::createFromFormat(
    'Y-m-d|', // or: '!Y-m-d'
    $date
);
0

你不应该那样做。

设置你的start_dateDATE NULL DEFAULT NULL`

你应该让 MySQL 默认为 NULL 而不是 0000-00-00

添加评论


 如果调用模型的create($request->all()) update($request->all()),,,如果字段像 2021-04-05 的字样,也会出现时间

不是 00:00:00,而是当前时间,我们可以通过修改器

如下

public function setStoreQianyueDateAttribute($value)
{
   
$this->attributes['store_qianyue_date'] = Carbon::createFromFormat('!Y-m-d',$value);
}


你的答案

来自 https://stackoverflow.com/questions/27693391/store-timestamp-with-time-000000