【发布时间】:2017-04-07 07:54:49
【问题描述】:
我试图完全从 MySQL 查询中获取这些空闲时间块,但我无法构造一个与已有数据一起工作的查询。我选择简单地从查询中获取start 和end 日期并计算出PHP 中的空闲时间块。然而,这也被证明是困难的。
我有以下数组(只是一个例子,日期和时间会有所不同):
$meeting = array(array('start' => '2016-11-14 16:00:00',
'end' => '2016-11-14 16:30:00'
),
array('start' => '2016-11-14 16:45:00',
'end' => '2016-11-14 20:00:00'
),
array('start' => '2016-11-14 14:00:00',
'end' => '2016-11-14 15:00:00'
),
array('start' => '2016-11-14 13:00:00',
'end' => '2016-11-14 14:00:00'
),
array('start' => '2016-11-11 15:20:00',
'end' => '2016-11-11 16:00:00'
),
array('start' => '2016-11-11 14:00:00',
'end' => '2016-11-11 15:00:00'
),
array('start' => '2016-11-07 07:00:00',
'end' => '2016-11-09 15:00:00'
)
);
我想要结束的是一组日期,其中包含当天每个空闲时间段的开始和结束时间,仅在每天 09:00 到 17:00 之间,不包括周末。因此,例如,上面的会议时间数组应生成以下空闲时间数组:
$daily_free = array('2016-11-09' => array(array('free_start' => '15:00:00',
'free_end' => '17:00:00'
)
),
'2016-11-10' => array(array('free_start' => '09:00:00',
'free_end' => '17:00:00'
)
),
'2016-11-11' => array(array('free_start' => '09:00:00',
'free_end' => '14:00:00'
),
array('free_start' => '15:00:00',
'free_end' => '15:20:00'
),
array('free_start' => '16:00:00',
'free_end' => '17:00:00'
)
),
'2016-11-14' => array(array('free_start' => '09:00:00',
'free_end' => '13:00:00'
),
array('free_start' => '15:00:00',
'free_end' => '16:00:00'
),
array('free_start' => '16:30:00',
'free_end' => '16:45:00'
)
)
);
您可以看到数组中只出现了有空闲时间的日子,11 月 7 日和 8 日没有空闲时间,所以它们根本不会出现。另外,11 月 12 日和 13 日没有出现在空闲时间数组中,这是因为它们是周末。但是,如果 12 日和 13 日不是周末,则它们应该以全天的空闲时间(09:00 到 17:00)出现在空闲时间数组中。
我能想到实现这一点的唯一方法之一是创建一个每天的数组,其中有一个从 09:00 到 17:00 的 5 分钟增量数组,其值为 NULL。然后循环遍历这个数组,检查每个日期和 5 分钟的增量是否在第一个数组的开始和结束时间之内,如果是,则将其标记为忙。然后我可以再次循环并获取每天空值的开始和结束时间?这似乎不是一个很好的解决方案,如果会议时间少于几分钟,也会失败。
我认为我现在看不到树木的树木,并且可能想多了。
还有其他解决方案吗?
编辑: SQL Fiddle 适合任何想通过 SQL 尝试的人
【问题讨论】:
-
创建一个包含日期列表的表并在 SQL 中完成这项工作不是很简单吗?如果您在 SQLFiddle 上创建示例数据集,我可以展示如何做到这一点。
-
@AlexBlex SQL Fiddle 已添加到问题中,谢谢!
-
顺便说一句,没有约会的日子会怎样?比如12和13?它们也应该是空闲时间,但您不要将它们包含在所需的输出中。
-
@phobia82 这是一个非常好的观点!如果他们不在周末,他们需要被包括在内。我将编辑我的问题以反映这一点。
标签: php mysql arrays datetime multidimensional-array