Laravel中的SQL Server如何格式化日期时间?

时间:2018-07-24 15:56:25

标签: sql-server laravel datetime

im尝试以laravel格式设置日期时间值以使其与sql server格式匹配,我收到此错误:

  

找不到分隔符号。找到意外的数据。   找到意外的数据。追踪数据

我在模型中使用自定义格式:

protected $dateFormat = 'd-m-Y H:i:s';

它对于create方法con控制器运行良好,没有问题,尝试更新时会发生错误,我认为与值在数据库中的存储方式有关。

使用修补程序,我在模型中检索了update_at的值,并以以下格式显示:

updated_at: "2018-07-24 09:14:09.000"

因此,当我更新此值时,使用的格式为:

protected $dateFormat = 'd-m-Y H:i:s';

我认为应该是d-m-Y H:i:s.000之类的东西,但是不起作用,我该如何解决呢?

4 个答案:

答案 0 :(得分:1)

您正在使用哪个版本的Laravel?这已在依赖PHP 7的最新发行版(无法确切记住哪个版本)中得到修复。

dateFormat应该为"Y-m-d H:i:s.v"。 v是毫秒(PHP 7.0.0中已添加)。返回更新/插入的模型时,导致您遇到更新和插入问题。它被传递给Carbon以将日期和日期时间字段转换为Carbon的实例,但是日期时间字段具有'trailing

答案 1 :(得分:1)

切换到laravel版本5.6时,我遇到了完全相同的问题。现在,我找到了解决此问题的正确方法。

像这样创建一个Base类,并添加一个public方法getDateFormat。 在那里,您返回的日期有些不同

return 'Y-d-m H:i:s.v';

请注意,日期(d)和月份(m)已切换,最后需要输入.v,代表毫秒。这对我来说很好。在这里查看我完整的Base类:

<?php

namespace App\Models\Base;

use Illuminate\Database\Eloquent\Model;

class BaseModel extends Model
{
    public function getDateFormat()
    {
        return 'Y-d-m H:i:s.v';
    }

    public $timestamps  = false;
}

答案 2 :(得分:0)

您也可以在SQL /选择查询中尝试这一操作:

\ DB :: raw(“ DATE_FORMAT(comments.date,'%d-%m-%Y%H:%i:%s')作为sth_date”)

例如:

Comment::orderBy('date','desc')->with('user')
        ->join('users','comments.id_user', '=', 'users.id')

        ->select('users.username', 'comments.id', 'comments.id_race', 'comments.status', 'comments.ip_address', 'comments.id_user', 
        \DB::raw ("DATE_FORMAT(comments.date,'%d-%m-%Y %H:%i:%s') as sth ") );

答案 3 :(得分:-3)

时间分数是数据库的配置,您可以在下面看到它,因此您可以尝试打开数据库。

https://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html

但是使用 $ d-> format(“ Y-m-d H:i:s.u”)之类的东西,您可以使用Datetime()类进行格式化/操作。