我正在尝试创建一个循环来输出以下内容:
08:00
08:15
08:30
08:45
09:00
09:15
09:30
09:45
...etc
我需要它从08:00
到17:00
.
这是我到目前为止的代码:
function echo_datelist ($i, $j, $day, $month, $year)
{
$time = str_pad($i, 2, '0', STR_PAD_LEFT).':'.str_pad($j, 2, '0', STR_PAD_LEFT);
$date = strtotime("$month $day $year $time:00");
$sql = mysql_query("select b.room_type, c.name from bookings as b, customers as c where b.the_date='$date' and b.id_customer=c.id");
echo $time.'<br />';
}
for ($i = 8; $i <= 16; $i++)
{
for ($j = 0; $j <= 45; $j+=15)
echo_datelist($i, $j, $day, $month, $year);
echo_datelist(17, 0, $day, $month, $year);
}
问题是,它每小时之间输出一个17:00
,例如:
08:00
08:15
08:30
08:45
17:00
09:00
09:15
09:30
09:45
17:00
附言我知道我不应该对数据库进行迭代旅行,但是在这之后我会解决这个问题。
使用范围函数来完成
<?php
date_default_timezone_set("Europe/London");
$range=range(strtotime("08:00"),strtotime("17:00"),15*60);
foreach($range as $time){
echo date("H:i",$time)."n";
}
?>
所以你没有循环,它只是为你创建一个数组(我的循环只是在格式化时打印出来(
对我来说看起来不必要地复杂。以下内容将打印出您想要的内容。大概它可以适应在您的代码中使用。对混乱的最终条件感到抱歉。
$min=array("00","15","30","45");
for($i=8;$i<17;$i++)
foreach ($min as $v)
print "$i:$vn";
print "17:00n";
或者,如果你想以一种稍微不透明的方式做到这一点......
for($i=8*60;$i<=17*60;$i+=15)
print floor($i/60) . ":" . ($i/60-floor($i/60))*60 . "n";
上面计算了 8 点钟位置的分钟值,然后重复添加 15 分钟。然后,使用一些数学运算从运行变量中提取小时和分钟数。
我的简单逻辑在这里
$start=strtotime('00:00');
$end=strtotime('23:30');
for ($i=$start;$i<=$end;$i = $i + 15*60)
{
//write your if conditions and implement your logic here
echo date('g:i A',$i).'<br>';
}
在循环中,您可以播放您想要的内容
您需要将最后一行移到外部 for 循环之外。
for ($i = 8; $i <= 16; $i++){
for ($j = 0; $j <= 45; $j+=15){
//inside the inner loop
echo_datelist($i, $j, $day, $month, $year);
}
//inside the outer loop
}
//outside the outer loop
echo_datelist(17, 0, $day, $month, $year);
简单来说,您是在说:
For each hour between 8 and 16
For each 15 minute interval
Echo the time
End
Echo 17:00
End
而不是:
For each hour between 8 and 16
For each 15 minute interval
Echo the time
End
End
Echo 17:00
我会考虑在一天中的所有时间执行您的 sql 查询,然后从中挑选出时间内的查询,否则您将每 15 分钟间隔执行一次 sql 查询(使用您的示例数据进行 37 次查询(
使用 PHP 5>= 5.3.0 您可以使用 DateTime::add
,请参阅:http://www.php.net/manual/de/datetime.add.php
DateInterval
可用于为我们的日期计算创建新的dateinterval
对象,并在任何脚本中使用。在所有日期和时间计算的高级PHP面向对象样式中,这种格式很有用。
查看以下链接:
http://php.net/manual/en/class.dateinterval.phphttp://www.plus2net.com/php_tutorial/date-interval.php
echo_datelist(17, 0, $day, $month, $year);
将该行移动到最外层的for
循环之后。
我正在研究一个类似的问题,但开始/结束时间是可变的。
这可能需要一点改进,但我无法打破它。
一开始你需要提供的只是日期和时间。
$day = "10/14/2011";
$startTime = date(strtotime($day." 16:00"));
$endTime = date(strtotime($day." 19:15"));
$timeDiff = round(($endTime - $startTime)/60/60);
$startHour = date("G", $startTime);
$endHour = $startHour + $timeDiff;
for ($i=$startHour; $i <= $endHour; $i++)
{
for ($j = 0; $j <= 45; $j+=15)
{
$time = $i.":".str_pad($j, 2, '0', STR_PAD_LEFT);
echo (date(strtotime($day." ".$time)) <= $endTime) ? date("g:i", strtotime($day." ".$time))."<br>" : "";
}
}
输出:
4:004:154:304:455:005:155:305:456:006:156:306:457:007:15
设置具有显式边界及其间隔的 DateTime 对象会使此过程非常干净。 请记住设置刚刚过去的结束时间,因为日期周期是结束日期时间的"独占"。
代码:(演示(
$period = new DatePeriod(
new DateTime('08:00:00'),
new DateInterval('PT15M'),
new DateTime('17:00:01')
);
foreach ($period as $dt) {
echo $dt->format("H:i") . "n";
}
输出:
08:00
08:15
08:30
08:45
09:00
09:15
09:30
09:45
10:00
10:15
10:30
10:45
11:00
11:15
11:30
11:45
12:00
12:15
12:30
12:45
13:00
13:15
13:30
13:45
14:00
14:15
14:30
14:45
15:00
15:15
15:30
15:45
16:00
16:15
16:30
16:45
17:00
我想出了这个,它可以打印你想要的任何增加的时间,您可以更改时间以显示下午 13 点或下午 1 点
<?php
$start=strtotime('00:00');
$end=strtotime('23:30');
$increase = 15; // How many minute to increase
for ($i=$start;$i<=$end;$i = $i + $increase*60)
{
if(date('H', $i) > 12 ){ //Here we check if the hour is bigger than 12, then we just do math -12 which will result in hour, for example 13PM which is 13-12=1PM
$hour = date('H', $i) - 12;
echo $hour.date(':i A',$i);
}else{
echo date('H:i A',$i);
}
}
?>
上一个代码结果
00:00 AM
00:15 AM
00:30 AM
00:45 AM
01:00 AM
01:15 AM
01:30 AM
01:45 AM
02:00 AM
02:15 AM
02:30 AM
02:45 AM
03:00 AM
03:15 AM
03:30 AM
03:45 AM
04:00 AM
04:15 AM
04:30 AM
04:45 AM
05:00 AM
05:15 AM
05:30 AM
05:45 AM
06:00 AM
06:15 AM
06:30 AM
06:45 AM
07:00 AM
07:15 AM
07:30 AM
07:45 AM
08:00 AM
08:15 AM
08:30 AM
08:45 AM
09:00 AM
09:15 AM
09:30 AM
09:45 AM
10:00 AM
10:15 AM
10:30 AM
10:45 AM
11:00 AM
11:15 AM
11:30 AM
11:45 AM
12:00 PM
12:15 PM
12:30 PM
12:45 PM
1:00 PM
1:15 PM
1:30 PM
1:45 PM
2:00 PM
2:15 PM
2:30 PM
2:45 PM
3:00 PM
3:15 PM
3:30 PM
3:45 PM
4:00 PM
4:15 PM
4:30 PM
4:45 PM
5:00 PM
5:15 PM
5:30 PM
5:45 PM
6:00 PM
6:15 PM
6:30 PM
6:45 PM
7:00 PM
7:15 PM
7:30 PM
7:45 PM
8:00 PM
8:15 PM
8:30 PM
8:45 PM
9:00 PM
9:15 PM
9:30 PM
9:45 PM
10:00 PM
10:15 PM
10:30 PM
10:45 PM
11:00 PM
11:15 PM
11:30 PM
如果您不需要 1PM 2PM 方法,则只需使用相同的代码并删除用于减法的数学运算,方法是删除 if
方法并将其替换为
echo date('H:i A',$i);