使用Laravel 5.4在数据库中插入日期和时间

时间:2018-07-02 10:04:42

标签: laravel-5.4

我想插入当前日期和时间的日期,这是我的代码:

$test = new Test;

$dt = new DateTime;

$test->date = $dt->format('m-d-y H:i:s');
$test->users_id = Auth::user()->id;
$test->save();

问题是它不适合数据库中的正确日期,因此插入:

2007-02-18 09:52:41

1 个答案:

答案 0 :(得分:1)

为什么要以数据库中未定义的自定义格式存储它?我认为错误的想法。


我认为合适的解决方案

我将假设您将日期和时间作为TimeStamp值存储在MySQL数据库中,默认值为null。像这样:

$table->timestamp('your-date-column')->nullable();

点击控制器方法时

public function yourControllerMethod(Request $request)
{
    // Don't forget to import the Carbon namespace
    $dateTime = Carbon::parse($request->your_datetime_field);

    $request['your_datetime_field'] = $dateTime->format('Y-m-d H:i:s');
}

在检索your_datetime_field时,默认使用以下方式将其解析为Carbon实例:

Test.php

/**
 * The dates that will be mutated to Carbon instance.
 *
 * @return  array
 */
protected $dates = [
    'your_datetime_field',
];

现在您已在运行时将字段转换为Carbon实例,则可以根据需要自由编辑日期和时间格式。


不合适的解决方案:

警告,我尚未对此进行测试,但是我认为它应该可以工作。

如果您仍要在数据库字段中将其另存为自定义格式,请将其另存为默认值为null的字符串格式。

$table->string('your-date-column')->nullable();

然后在运行时将其强制转换为datetime类型。

/**
 * The attributes that should be cast to native types.
 *
 * @var array
 */
protected $casts = [
    'your_datetime_field' => 'datetime:Y-m-d',
];

同样,我建议不要朝错误的方向前进,除非您知道自己在做什么以及后果如何。

您明白了。