在我的模型中,我有以下内容:
protected $dates = [
'start',
'end',
'created_at',
'updated_at'
];
我使用日期时间选择器以这种格式插入开始日期和结束日期:
2016-01-23 22:00
没有秒。当我这样做的时候,我收到了这个错误:
InvalidArgumentException in Carbon.php line 425:
Data missing
at Carbon::createFromFormat('Y-m-d H:i:s', '2016-01-23 22:00') in Model.php line 3015
如果我确实包括秒数,它就可以了。秒对我来说并不重要,我不想将它们包含在我的日期时间选择器字段中。任何方式,所以我仍然可以使用这些字段作为日期字段?
答案 0 :(得分:48)
您的日期字符串和日期格式不同,您必须更改格式字符串或修改日期字符串以使它们匹配。
当Carbon的createFromFormat
函数接收到与传递的格式字符串不匹配的日期字符串时,会出现此错误。更确切地说,这来自DateTime::createFromFormat
函数,因为Carbon只是称之为:
public static function createFromFormat($format, $time, $tz = null)
{
if ($tz !== null) {
$dt = parent::createFromFormat($format, $time, static::safeCreateDateTimeZone($tz));
} else {
$dt = parent::createFromFormat($format, $time); // Where the error happens.
}
if ($dt instanceof DateTime) {
return static::instance($dt);
}
$errors = static::getLastErrors();
throw new InvalidArgumentException(implode(PHP_EOL, $errors['errors'])); // Where the exception was thrown.
}
如果您的日期字符串是"更短"比这种情况下的格式字符串:
Carbon::createFromFormat('Y-m-d H:i:s', '2017-01-04 00:52');
碳会抛出:
Carbon.php第425行中的InvalidArgumentException:
数据缺失
如果您的日期字符串是"更长"比这种情况下的格式字符串:
Carbon::createFromFormat('Y-m-d H:i', '2017-01-02 00:27:00');
碳会抛出:
Carbon.php第425行中的InvalidArgumentException:
尾随数据
根据documentation on mutators,默认日期格式为:'Y-m-d H:i:s'
。日期处理发生在Model's asDateTime
function。在最后一个条件中调用getDateFormat
function,即自定义格式的来源。默认格式为defined in the Database's Grammar
class。
您必须确保日期字符串与格式字符串匹配。
您可以覆盖默认格式字符串,如下所示:
class Event extends Model {
protected $dateFormat = 'Y-m-d H:i';
}
这种方法存在两个问题:
$dates
数组中定义的每个字段。我建议的解决方案是日期格式应保持默认'Y-m-d H:i:s'
,您应该完成日期的缺失部分,如下所示:
public function store(Request $request) {
$requestData = $request->all();
$requestData['start_time'] .= ':00';
$requestData['end_time'] .= ':00';
$event = new Event($requestData);
$event->save();
}
如果你想使用日期,你应该格式化它:
public function show(Request request, $eventId) {
$event = Event::findOrFail($eventId);
$startTime = $event->start_time->format('Y-m-d H:i');
$endTime = $event->end_time->format('Y-m-d H:i');
}
当然,字段应该变为日期:
class Event extends Model {
protected $dates = [
'start_time',
'end_time',
'created_at',
'updated_at',
'deleted_at',
];
}
答案 1 :(得分:4)
您可以像Christian所说的那样在模型中设置$ dateFormat,但如果您不想将updated_at和created_at字段强加到操作中,您可以使用事件“更正”datetime对象,然后再将其保存到数据库中
在这里您有关于它的官方文档:https://laravel.com/docs/5.2/eloquent#events
答案 2 :(得分:4)
此功能已禁用,即日期时间内碳的模拟 https://laravel.com/docs/5.0/eloquent#date-mutators
import cv2
import numpy as np
import os
import time
import datetime
import urllib
import pynotify
stream=urllib.urlopen('http://user:pass@192.168.198.120/video.mjpg')
bytes=''
fgbg = cv2.createBackgroundSubtractorMOG2()
while True:
bytes+=stream.read(16384)
a = bytes.find('\xff\xd8')
b = bytes.find('\xff\xd9')
if a!=-1 and b!=-1:
jpg = bytes[a:b+2]
bytes= bytes[b+2:]
img = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8),cv2.IMREAD_COLOR)
rows,cols,c = img.shape
mask = np.zeros(img.shape, dtype=np.uint8)
roi_corners = np.array([[(940,220),(1080,240), (1080,310), (940,290)]], dtype=np.int32)
channel_count = img.shape[2]
ignore_mask_color = (255,)*channel_count
cv2.fillPoly(mask, roi_corners, ignore_mask_color)
masked_image = cv2.bitwise_and(img, mask)
fgmask = fgbg.apply(masked_image)
iii = fgmask[220:310,940:1080]
hist,bins = np.histogram(iii.ravel(),256,[0,256])
black, white, cnt1, cnt2 = 0,0,0,0
for i in range(0,127):
black += hist[i]
cnt1+=1
bl = float(black / cnt1)
for i in range(128,256):
white += hist[i]
cnt2+=1
wh = float(white / cnt2)
finalResult = ((bl+1) / (wh+1))/10
if finalResult < 1.0:
pynotify.init("cv2alert")
notice = pynotify.Notification('Alert', 'Alert text')
try:
notice.show()
except gio.Error:
print "Error"
答案 3 :(得分:3)
您需要在模型中将protected $dateFormat
设为'Y-m-d H:i
',请参阅https://laravel.com/docs/5.2/eloquent-mutators#date-mutators
答案 4 :(得分:0)
确保您没有在数据库的某些行中省略“ created_at”或“ updated_at”字段,这是必需的;如果是这种情况,请删除它们具有这些空字段的记录,或以有效的时间戳格式输入值,例如'2018-09-01 15:18:53'。
答案 5 :(得分:0)
这是一种可能性
您需要检查结果数据列。如果您的列名“ created_at”或“ updated_at”为空,那么它将通过此错误进行。
如何解决? 首先,您需要使用Laravel carbon将数据存储在这两列中。 例如:
$user = new User();
$user->created_at = Carbon::now()->setTime(0,0)->format('Y-m-d H:i:s');
$user->updated_at = Carbon::now()->setTime(0,0)->format('Y-m-d H:i:s');
$user->save();
仅此而已,我希望它能起作用
快乐编码。...
答案 6 :(得分:0)
对我来说,问题出在供应商(vendor \ laravel \ framework \ src \ Illuminate \ Database \ Query \ Grammars \ SqlServerGrammar.php)中的SQLServerGrammar。
SQLServerGramma中的默认值为Y-m-d H:i:s.v
。
我们扩展了班级结局,删除了.v
。