使用mysql在15分钟的插槽中分割时间间隔

Par*_*xit 5 php mysql sql datetime group-by

我有2个约会

start datetime = 2013-08-28 17:43:41AND end datetime =2013-08-28 22:23:51

现在我想将开始时间转换为上限15分钟间隔,就像2013-08-28 17:45:00在这种情况下一样,在较低级别15分钟间隔内转换的结束时间相同2013-08-28 22:15:00

然后我想要那个时间之间的15分钟间隔的数组.

例如.对于我们的情况应该是

a[0] = 2013-08-28 17:45:00
a[0] = 2013-08-28 18:00:00
a[1] = 2013-08-28 18:15:00
a[2] = 2013-08-28 18:30:00
a[3] = 2013-08-28 18:45:00
a[4] = 2013-08-28 19:00:00
......like wise

我希望使用mySql/php,但mysql是优先级,因为数据来自我的数据库.

小智 9

如果您有开始时间和结束时间,请将它们转换为UNIX时间戳.之后,只需创建一个循环,将开始时间增加15分钟并继续运行直到到达结束时间.

像这样的东西:

$array_of_time = array ();
$start_time    = strtotime ("2013-08-28 17:45:00");
$end_time      = strtotime ("2013-08-28 22:15:00");

$fifteen_mins  = 15 * 60;

while ($start_time <= $end_time)
{
   $array_of_time[] = date ("Y-m-d H:i:s", $start_time);
   $start_time += $fifteen_mins;
}

print_r ($array_of_time);
Run Code Online (Sandbox Code Playgroud)


Par*_*xit 2

我已经通过 PHP 和查询从数据库检索开始和结束日期时间解决了这个问题。

$start_datetime = strtotime($start_datetime); //from 2013-08-28 17:43:41 to timestamp
$end_datetime = strtotime("+$duration minutes", $start_datetime); //from 2013-08-28 17:43:41 to timestamp

//loop till start time is less than end time
while ($start_datetime < $end_datetime)
{
     //add date as a key in first level array
     if(!array_key_exists(date('Y-m-d', $start_datetime), $booking_slot)) {
          $booking_slot[date('Y-m-d', $start_datetime)]=array();
     }

     //add time slot for perticular date's array
     array_push($booking_slot[date('Y-m-d', $start_datetime)], date("h:i A", $start_datetime));

     //add $interval to find next interval
     $start_datetime = strtotime("+$interval minutes", $start_datetime); //slot or interval
}
Run Code Online (Sandbox Code Playgroud)