找到了这个,但它没有帮助: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",
}
我错过了什么?
答案 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');
}