<?php
// Datas vindas do banco de dados:
$dates = [
["2017-05-08 11:28:40", "2017-05-08 17:52:12"],
["2017-05-08 18:34:02", "2017-05-10 09:02:57"],
["2017-05-10 09:44:31", "2017-05-10 13:22:10"],
["2017-05-10 22:17:54", "2017-05-11 03:41:25"]
];
// Percorre os intervalos de datas:
foreach ($dates as $index => $date)
{
// Cria um objeto DateTime para cada:
$start = new DateTime($date[0]);
$end = new DateTime($date[1]);
// Se a diferença entre as datas for superior a um dia:
if ($end->diff($start)->format("%a") > 0)
{
// Lista de fatias do intervalo:
$interval = [];
// Enquanto a diferença for maior que um dia:
while ($end->diff($start)->format("%a") > 0)
{
// Define a fatia do intervalo para o dia:
$sliceStart = clone $start;
$sliceEnd = clone $start;
$interval[] = [$sliceStart->format("Y-m-d H:i:s"), $sliceEnd->setTime(23, 59, 59)->format("Y-m-d H:i:s")];
// Incrementa em um dia a data de início:
$start->modify("+1 day")->setTime(0, 0, 0);
}
// Define o intervalo para o último dia:
$interval[] = [$start->format("Y-m-d H:i:s"), $end->format("Y-m-d H:i:s")];
// Substitui o intervalo original pela lista de fatias:
$dates[$index] = $interval;
}
}
PD9waHAKCi8vIERhdGFzIHZpbmRhcyBkbyBiYW5jbyBkZSBkYWRvczoKJGRhdGVzID0gWwogICAgWyIyMDE3LTA1LTA4IDExOjI4OjQwIiwgIjIwMTctMDUtMDggMTc6NTI6MTIiXSwKICAgIFsiMjAxNy0wNS0wOCAxODozNDowMiIsICIyMDE3LTA1LTEwIDA5OjAyOjU3Il0sCiAgICBbIjIwMTctMDUtMTAgMDk6NDQ6MzEiLCAiMjAxNy0wNS0xMCAxMzoyMjoxMCJdLAogICAgWyIyMDE3LTA1LTEwIDIyOjE3OjU0IiwgIjIwMTctMDUtMTEgMDM6NDE6MjUiXQpdOwoKLy8gUGVyY29ycmUgb3MgaW50ZXJ2YWxvcyBkZSBkYXRhczoKZm9yZWFjaCAoJGRhdGVzIGFzICRpbmRleCA9PiAkZGF0ZSkKewogICAgCiAgICAvLyBDcmlhIHVtIG9iamV0byBEYXRlVGltZSBwYXJhIGNhZGE6CiAgICAkc3RhcnQgPSBuZXcgRGF0ZVRpbWUoJGRhdGVbMF0pOwogICAgJGVuZCAgID0gbmV3IERhdGVUaW1lKCRkYXRlWzFdKTsKICAgIAogICAgLy8gU2UgYSBkaWZlcmVuw6dhIGVudHJlIGFzIGRhdGFzIGZvciBzdXBlcmlvciBhIHVtIGRpYToKICAgIGlmICgkZW5kLT5kaWZmKCRzdGFydCktPmZvcm1hdCgiJWEiKSA+IDApCiAgICB7CiAgICAgICAgLy8gTGlzdGEgZGUgZmF0aWFzIGRvIGludGVydmFsbzoKICAgICAgICAkaW50ZXJ2YWwgPSBbXTsKICAgICAgICAKICAgICAgICAvLyBFbnF1YW50byBhIGRpZmVyZW7Dp2EgZm9yIG1haW9yIHF1ZSB1bSBkaWE6CiAgICAgICAgd2hpbGUgKCRlbmQtPmRpZmYoJHN0YXJ0KS0+Zm9ybWF0KCIlYSIpID4gMCkKICAgICAgICB7CiAgICAgICAgICAgIC8vIERlZmluZSBhIGZhdGlhIGRvIGludGVydmFsbyBwYXJhIG8gZGlhOgogICAgICAgICAgICAKICAgICAgICAgICAgJHNsaWNlU3RhcnQgPSBjbG9uZSAkc3RhcnQ7CiAgICAgICAgICAgICRzbGljZUVuZCAgID0gY2xvbmUgJHN0YXJ0OwogICAgICAgICAgICAKICAgICAgICAgICAgJGludGVydmFsW10gPSBbJHNsaWNlU3RhcnQtPmZvcm1hdCgiWS1tLWQgSDppOnMiKSwgJHNsaWNlRW5kLT5zZXRUaW1lKDIzLCA1OSwgNTkpLT5mb3JtYXQoIlktbS1kIEg6aTpzIildOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gSW5jcmVtZW50YSBlbSB1bSBkaWEgYSBkYXRhIGRlIGluw61jaW86CiAgICAgICAgICAgICRzdGFydC0+bW9kaWZ5KCIrMSBkYXkiKS0+c2V0VGltZSgwLCAwLCAwKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gRGVmaW5lIG8gaW50ZXJ2YWxvIHBhcmEgbyDDumx0aW1vIGRpYToKICAgICAgICAkaW50ZXJ2YWxbXSA9IFskc3RhcnQtPmZvcm1hdCgiWS1tLWQgSDppOnMiKSwgJGVuZC0+Zm9ybWF0KCJZLW0tZCBIOmk6cyIpXTsKICAgICAgICAKICAgICAgICAvLyBTdWJzdGl0dWkgbyBpbnRlcnZhbG8gb3JpZ2luYWwgcGVsYSBsaXN0YSBkZSBmYXRpYXM6CiAgICAgICAgJGRhdGVzWyRpbmRleF0gPSAkaW50ZXJ2YWw7CiAgICB9Cn0KCnByaW50X3IoJGRhdGVzKTs=