Laravel 5.2的日期时间问题& MS SQL Server

时间:2016-04-06 12:27:53

标签: sql-server laravel datetime laravel-5.2

找到了这个,但它没有帮助:https://laracasts.com/discuss/channels/eloquent/timestampdatetime-issue-with-51-sqlserver

当我在模型上设置我的日期字段时protected $dates = ['OrderDate','TimeStamp'];,然后调用$order->OrderDate我收到以下错误:

InvalidArgumentException with message 'Unexpected data found.
Unexpected data found.
The separation symbol could not be found
The format separator does not match
Trailing data'

但是,如果我使用相同的格式手动创建Carbon日期对象并直接从SQL Server复制\粘贴日期,则成功完成:

>>> Carbon\Carbon::createFromFormat('Y-m-d H:i:s.000', '2015-12-29 00:00:00.000');
=> Carbon\Carbon {#835
    +"date": "2015-12-29 00:00:00.000000",
    +"timezone_type": 3,
    +"timezone": "UTC",
   }

我错过了什么?

2 个答案:

答案 0 :(得分:4)

出于某种原因,Laravel将其视为M j Y h:i:s:000A - 可能是司机。我将protected $dateFormat = 'M j Y h:i:s:000A';添加到我正在使用的所有MS SQL Server模型中。

答案 1 :(得分:0)

解决方法是手动设置访问器和更改器并解析日期,而不是将其放在$ dates数组中。

类似的东西:

public function getOrderDateAttribute($value)
{
    return Carbon::createFromFormat('Y-m-d H:i:s.000', $value);
}

public function getTimeStampAttribute($value)
{
    return Carbon::createFromFormat('Y-m-d H:i:s.000', $value);
}

public function setOrderDateAttribute($value)
{
    $this->attributes['OrderDate'] = Carbon::createFromFormat('Y-m-d H:i:s', $value)->format('Y-m-d H:i:s.000');
}

public function setTimeStampAttribute($value)
{
    $this->attributes['TimeStamp'] = Carbon::createFromFormat('Y-m-d H:i:s.000', $value)->format('Y-m-d H:i:s.000');
}