我有2个日期
start datetime = 2013-08-28 17:43:41
AND 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是优先级,因为数据来自我的数据库。
答案 0 :(得分: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);
答案 1 :(得分: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
}
答案 2 :(得分:2)
您可以使用以下签名创建自定义MySQL函数和过程。
以下是一些伪 MySQL代码的示例,我从来没有编写MySQL,我试图查找文档而且它很糟糕,否则这真是一个30分钟的任务,如果你能找到的话语言语法的文档。
请记住
以下是如何执行此操作
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