【问题标题】:Timestamp being saved as DateTime by Laravel - SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value:Laravel 将时间戳保存为 DateTime - SQLSTATE [22007]:无效的日期时间格式:1292 不正确的日期时间值:
【发布时间】:2021-03-08 21:02:17
【问题描述】:

我从前端收到一个日期,需要将其保存为我的 Laravel API 上的 UNIX 时间戳。 日期格式可以是YYYY-MM-DD hh:mm,也可以只是日期格式YYYY-MM-DD

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

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);

最后是控制器创建条目...

$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 值?

【问题讨论】:

标签: php laravel date datetime


【解决方案1】:

MySQL 时间戳不同于 PHP 中的时间。 PHP 中时间的格式是自 UNIX 纪元以来的秒数,但 MySQL 只是 UTC '1970-01-01 00:00:01' 到 '2038-01-19 03:14:07' 范围内的格式化日期时间世界标准时间。也许这是以相同的方式存储的,但是要保存它,您可以给它一个日期时间字符串。在您的情况下,您可以省略突变器,它会起作用。

【讨论】:

  • 这并不能解决我的问题。我需要将日期保存为时间戳,而不是日期时间格式。我如何正确地将它保存为 Laravel 和 MySQL 之间的时间戳?将时间戳保存为整数,因为它是自纪元以来的秒数?
  • @user931018 如果您只想保存秒数,那么整数变体之一(可能是 bigInt)应该可以工作。
猜你喜欢
  • 2017-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
  • 1970-01-01
  • 1970-01-01
  • 2019-07-31
相关资源
最近更新 更多