繁体   English   中英

Laravel 将时间戳保存为 DateTime - SQLSTATE[22007]:日期时间格式无效:1292 日期时间值不正确:

[英]Timestamp being saved as DateTime by Laravel - SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value:

我从前端收到一个日期,需要将其保存为 UNIX 时间戳在我的 Laravel API 上。 日期将采用YYYY-MM-DD hh:mm格式,或者只是简单的日期为YYYY-MM-DD

在我的 model 中,我定义了修改器和访问器来将日期转换为时间戳,反之亦然。 从我在文档和在线阅读的内容来看,这是正确的方法。

public function setStartAttribute($value)
{
    $this->attributes['start'] = strtotime($value);
}

public function getStartAttribute($value)
{
    $value = Carbon::createFromTimestamp($value)->toDateTimeString(); 
    return $value;
}

我在迁移中也将这些字段定义为timestamp ......

$table->timestamp('start')->nullable()->default(null);

最后是 controller 创建条目...

$entry = entry::create([
     'name' => $request->name,
     'description' => $request->description,
     'type' => $request->type,
     'start' => $request->start,
]);

但是每当我尝试创建新条目时,我仍然会收到错误SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '1615381200' for column 'start' at row 1 为什么在我将其转换为时间戳后尝试将其保存为datetime时间值?

MySQL 时间戳不同于 PHP 中的时间。 The format of a time in PHP is seconds since UNIX epoch, but a MySQL is just a formatted datetime in the range '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07'世界标准时间。 也许这是以相同的方式存储的,但要保存它,你可以给它一个日期时间字符串。 在您的情况下,您可以省略突变器,它会起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM