【发布时间】:2020-02-03 21:23:08
【问题描述】:
我创建了一个函数,我想检查两个日期之间是否有一定的周数。
public function checkShifts()
{
$now = new DateTime();
$shifts = Shift::where("disabled", "=", "0")->get();
foreach ($shifts as $shift)
{
$time = DateTime::createFromFormat('Y-m-d H:MMM:SS', $shift->start, null);
if (date_diff($now, $time, false) >= 42)
{
$shift->disabled = true;
}
}
}
我得到 Shift 开始日期,将其转换为 DateTime 对象并尝试运行 date_diff。但是,我不断收到 Date_diff() 期望参数 2 为 DateTimeInterface, Boolean Given 错误。
VAR_DUMP:
object(App\Shift)#729 (26) {
["table":protected]=>
string(5) "shift"
["connection":protected]=>
string(5) "mysql"
["primaryKey":protected]=>
string(2) "id"
["keyType":protected]=>
string(3) "int"
["incrementing"]=>
bool(true)
["with":protected]=>
array(0) {
}
["withCount":protected]=>
array(0) {
}
["perPage":protected]=>
int(15)
["exists"]=>
bool(true)
["wasRecentlyCreated"]=>
bool(false)
["attributes":protected]=>
array(7) {
["id"]=>
int(21)
["start"]=>
string(19) "2020-02-03 15:00:00"
["end"]=>
string(19) "2020-02-03 21:00:00"
["department_id"]=>
int(1)
["disabled"]=>
int(0)
["created_at"]=>
string(19) "2020-02-03 15:41:06"
["updated_at"]=>
string(19) "2020-02-03 20:39:27"
【问题讨论】:
-
在您的
foreach、var_dump($shift)中;以确保它包含您所期望的内容。 -
如果
$shift是一个数组,那么你不应该这样做$shift->start -
DateTime::createFromFormat 将在失败时返回 false,因此您的格式字符串不正确或 $shift->start 不正确。
-
另外,您认为“H:MMM:SS”在日期格式中代表什么?因为我几乎可以保证它不是你想的那样。查看日期格式字符here
-
你想要的格式是 "Y-m-d H:i:s" 投票结束作为错别字