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中执行此操作并将其存储在表中