日期时间格式无效:1292日期时间值不正确 - Laravel 5.2

时间:2017-06-07 09:46:58

标签: php mysql laravel

当我将这些值插入数据库表时,我收到此错误:

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value:
'24/06/2017' for column 'registration_from' at row 1 
(SQL: insert into `campus_registrations` (`campus_major_class_id`, 
`registration_from`, `registration_to`, `testing`, `announcement`, 
`enrollment_from`, `enrollment_to`, `updated_at`, `created_at`) values (3, 
24/06/2017, 27/06/2017, 13/07/2017, 01/08/2017, 05/09/2017, 31/01/2018,
 2017-06-07 09:39:31, 2017-06-07 09:39:31))

我是否必须先开始约会时间或什么?

9 个答案:

答案 0 :(得分:6)

由于您没有使用标准日期时间格式,因此每个日期都会define a mutator。例如:

public function setRegistrationFromAttribute($value)
{
    $this->attributes['registration_from'] =  Carbon::parse($value);
}

答案 1 :(得分:5)

错误在于:

Incorrect datetime value: '24/06/2017' for column 'registration_from' at row 1

mysql中date列的默认格式为Y-m-d,而datetime的默认格式为Y-m-d H:i:s。因此,请将您的日期更改为此格式,然后重试。

答案 2 :(得分:2)

尝试从vue js前端向laravel后端API注册用户时遇到相同的错误。

解决方案是将mysql严格模式更新为false。如果有人知道这种方法的弊端,请留下您的评论!

//config/database.php
'mysql' => [
    'strict' => false,
]

答案 3 :(得分:1)

我遇到了同样的问题,最后我解决了这个问题。您可以在add.blade.php的末尾添加几行代码

 $('.date-picker').datepicker({
                format: 'yy/mm/dd',
                autoclose: true,
                todayHighlight: true
            });

答案 4 :(得分:0)

Reference

MYSQL以YYYY-MM-DDYY-MM-DD格式识别日期值。您可以使用/。此24/06/2017被视为无效。试试2017/06/24

答案 5 :(得分:0)

这是在laravel 5.6下发生的,直到我将代码更改为 $table->date('last_date')->default(now());

答案 6 :(得分:0)

别忘了Y2K38(2038年的问题)-

timestamp的限制为1970-01-01 00:00:01 UTC到2038-01-19 03:14:07 UTC(源),而dateTime的范围为1000-01-01 00:00:009999-12-31 23:59:59 ,因此在确定使用哪种类型之前,请考虑计划在该字段中存储什么。

timestampdateTime类似-它们将日期(YYYY-MM-DD)和时间(HH:MM:SS)一起存储在一个字段中,即YYYY-MM-DD HH:MM:SS。两者之间的区别在于,无论何时更新数据库记录,时间戳都可以使用(MySQL的)CURRENT_TIMESTAMP作为其值。这可以在数据库级别进行处理,非常适合Laravel的created_atupdated_at字段。

date仅存储日期成分,即YYYY-MM-DD1000-00-019999-12-31)。

timestamps不带参数,这是将created_atupdated_at时间戳字段添加到数据库中的快捷方式。

因此将时间戳记上的日期设置为大于2038-01-19 03:14:07 UTC的日期也会引发-SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value

答案 7 :(得分:0)

  1. 我已在新迁移中删除问题列:

$table->dropColumn('time_to_deliver');

  1. 创建了新的迁移文件,现在而不是将“ timestamp”放入“ time”作为类型:

$table->time('time_to_deliver')->nullable()->after('date_to_deliver');

  1. 在下一个迁移文件中,下一步(循环内)完成

$orderLcl = new Order;// a Model

$orderLcl->time_to_deliver = date("H:i",$mock_timestampLcl);

.....
$orderLcl->save();

答案 8 :(得分:0)

如果该列的默认设置为 NULL,您可能可以在代码中执行以下操作:

$model->column = NULL;