Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用mysql在15分钟插槽中拆分时间间隔_Php_Mysql_Sql_Datetime_Group By - Fatal编程技术网

Php 使用mysql在15分钟插槽中拆分时间间隔

Php 使用mysql在15分钟插槽中拆分时间间隔,php,mysql,sql,datetime,group-by,Php,Mysql,Sql,Datetime,Group By,我有两次约会 开始日期时间=2013-08-28 17:43:41和结束日期时间=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 17:43:41
和结束日期时间=
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 a[0]=2013-08-28 17:45:00 a[0]=2013-08-28 18:00:00 a[1]=2013-08-2818:15:00 a[2]=2013-08-28 18:30:00 a[3]=2013-08-2818:45:00 a[4]=2013-08-2819:00:00 ……像智者一样
我希望使用mySql/php实现这一点,但mySql具有优先权,因为数据来自我的数据库。

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

$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
}
大概是这样的:

$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);
$array\u of_time=array();
$start_time=strottime(“2013-08-28 17:45:00”);
$end_time=strottime(“2013-08-28 22:15:00”);
十五分钟=15*60;

虽然($start_-time我已经通过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
}
$start\u datetime=strotime($start\u datetime);//从2013-08-28 17:43:41到时间戳
$end_datetime=strottime(“+$duration minutes”,$start_datetime);//从2013-08-28 17:43:41到时间戳
//循环直到开始时间小于结束时间
while($start\u datetime<$end\u datetime)
{
//将日期添加为第一级数组中的键
如果(!array_key_存在(日期('Y-m-d',$start_datetime),$booking_slot)){
$booking_slot[date('Y-m-d',$start_datetime)]=数组();
}
//为特定日期的数组添加时隙
数组推送($booking\u slot[date($Y-m-d',$start\u datetime)],日期($h:ia',$start\u datetime));
//添加$interval以查找下一个间隔
$start\u datetime=strottime(“+$interval minutes”,$start\u datetime);//时隙或间隔
}

您可以使用以下签名创建自定义MySQL函数和过程

  • 创建函数ToUpper15(dateParam DATETIME)
  • 创建函数ToLower15(dateParam DATETIME)
  • 创建过程AddIntervalMinutes(开始日期日期时间、结束日期日期时间、间隔整数)
  • 下面是一些MySQL代码的示例,我从来没有编写过MySQL,我试图寻找文档和它的可怕之处,否则这真的是一个30分钟的任务,如果你能找到该语言语法的文档的话

    记住

    • 当你在45分钟以上取整时,你就进入了下一个小时
    • 对ToLower15也要这样做
    • 使用系统函数AddTime()执行15分钟的间隔
    下面是您可以如何做到这一点

    CREATE FUNCTION ToUpper15(dateParam DATETIME) 
    RETURNS DATETIME
    DETERMINISTIC
    BEGIN
       DECLARE dateYear   INT;
       DECLARE dateMonth  INT;
       DECLARE dateDay    INT;
       DECLARE dateHour   INT;
       DECLARE dateMinute INT;
    
       SET dateYear   = YEAR(dateParam);
       SET dateMonth  = MONTH(dateParam);
       SET dateDay    = DAY(dateParam);
       SET dateHour   = HOUR(dateParam);
       SET dateMinute = MINUTE(dateParam);
    
       IF (dateMinute >= 0 AND dateMinute < 15) THEN
          SET dateMinute = 15;
       ELSEIF (dateMinute >= 15  AND dateMinute < 30) THEN
          SET dateMinute = 30;
       ELSEIF (dateMinute >= 30  AND dateMinute < 45) THEN
          SET dateMinute = 45;
       ELSEIF (dateMinute >= 45  AND dateMinute < 60) THEN
          BEGIN
             SET dateMinute = 0;
             SET dateHour = dateHour + 1;
          END
       END IF;
    
       RETURN CONCAT(dateYear, '-', dateMonth, '-', dateDay, ' ', dateHour, ':', 'dateMinute');
    END 
    
    创建函数ToUpper15(dateParam DATETIME)
    返回日期时间
    确定性
    开始
    声明日期年份INT;
    声明dateMonth INT;
    声明dateDay INT;
    声明dateHour INT;
    声明dateminuteint;
    设置日期年=年(日期参数);
    设置dateMonth=MONTH(dateParam);
    设置dateDay=DAY(dateParam);
    设置dateHour=HOUR(dateParam);
    设置日期分钟=分钟(日期参数);
    如果(dateMinute>=0且dateMinute<15),则
    设置日期分钟=15;
    如果(dateMinute>=15,dateMinute<30),则
    设置日期分钟=30;
    如果(dateMinute>=30,dateMinute<45),则
    设置日期分钟=45;
    ELSEIF(dateMinute>=45,dateMinute<60)则
    开始
    设置dateMinute=0;
    设置dateHour=dateHour+1;
    结束
    如果结束;
    返回CONCAT(dateYear,“-”,dateMonth,“-”,dateDay,“,dateHour,”:“,“dateMinute”);
    结束
    
    如果发现重复,请提供原始问题的详细信息。谢谢!这是一个链接,用于将所有转换日期时间转换为15分钟的上限或下限。谢谢!第一个问题已解决。现在我想将其拆分为间隔并存储在数组中。拆分数据库中的值?未获得解释。在第一步中,我想转换开始和结束时间to高级/低级四分之一小时。现在,我想创建一个数组,在开始和结束时间之间存储15分钟的间隔值。是否可以使用mysql?都是php/mysql。但是mysql更可取我想不出一个直接的方法通过mysql来实现。间接的方法是创建一个表,其中包含24小时内所有15分钟的间隔小时,然后您可以从十五分钟表中选择十五分钟,其中十五分钟>='2013-08-28 1:45:00'和十五分钟,否则,请使用临时表和存储过程查看类似的内容。确切地说,您需要在PHP中执行此操作并将其存储在表中