将分钟递增到最近的 15 分钟间隔
Increment minute to the nearest 15 minute interval
我想我快到了 - 尝试获取当前时间然后添加一个小时然后将选项输出为 15 分钟的间隔 - 所以如果它是 14:12 第一个可用的时间段将是 14:15 然后每 15 分钟一次,直到我结束时间
$start = new DateTime("Now");
$start->add(new DateInterval('PT1H'));
$end = new DateTime("2015-05-16 17:00");
$interval = new DateInterval('PT15M');
$period = new DatePeriod($start, $interval, $end);
$current_date = date('d-M-Y g:i:s A');
$current_time = strtotime($current_date);
foreach ($period as $dt)
{
echo $dt->format('H:i')."<br>";
}
我假设你的问题是如何到达正确的第 15 分钟?
这是否解决了您的问题?:
<?php
$start = new DateTime("Now");
$currentMinutes = $start->format('i');
if ($currentMinutes > 15) {
$start->setTime(($start->format('H') + 1), 15);
} elseif($currentMinutes < 15) {
$start->setTime($start->format('H'), 15);
}
$end = new DateTime("2015-05-16 17:00");
$interval = new DateInterval('PT15M');
$period = new DatePeriod($start, $interval, $end);
$current_date = date('d-M-Y g:i:s A');
$current_time = strtotime($current_date);
foreach ($period as $dt)
{
echo $dt->format('H:i')."<br>";
}
或者,如果你喜欢简短的话:
$start = new DateTime("2015-05-16 13:15");
$currentMinutes = $start->format('i');
$currentHour = $start->format('H');
$start->setTime(($currentMinutes > 15 ? ++$currentHour : $currentHour), 15);
[...]
$min15InSecs = 15*60;
$min15 = time()-(time()%$min15InSecs)+$min15InSecs;
$start = new DateTime(date("Y-m-d H:i", $min15));
$start->add(new DateInterval('PT1H'));
$end = new DateTime("2015-05-16 19:00");
$interval = new DateInterval('PT15M');
$period = new DatePeriod($start, $interval, $end);
$current_date = date('d-M-Y g:i:s A');
$current_time = strtotime($current_date);
foreach ($period as $dt)
{
echo $dt->format('H:i')."<br>";
}
您可以像这样将数字限制在下一个 15 的倍数:
ceil($num / 15) * 15
如上所述调整 $start
日期。示例:
$start = new DateTime("today 14:12"); // 2015-05-16 14:12:00
$hour = (int) $start->format("H"); // 14
$minute = (int) $start->format("i"); // 12
$clamped = ceil($minute / 15) * 15; // 15
$start->setTime($hour, $clamped); // 2015-05-16 14:15:00
setTime
注意:超出范围的值会添加到它们的父值中。
我想我快到了 - 尝试获取当前时间然后添加一个小时然后将选项输出为 15 分钟的间隔 - 所以如果它是 14:12 第一个可用的时间段将是 14:15 然后每 15 分钟一次,直到我结束时间
$start = new DateTime("Now");
$start->add(new DateInterval('PT1H'));
$end = new DateTime("2015-05-16 17:00");
$interval = new DateInterval('PT15M');
$period = new DatePeriod($start, $interval, $end);
$current_date = date('d-M-Y g:i:s A');
$current_time = strtotime($current_date);
foreach ($period as $dt)
{
echo $dt->format('H:i')."<br>";
}
我假设你的问题是如何到达正确的第 15 分钟?
这是否解决了您的问题?:
<?php
$start = new DateTime("Now");
$currentMinutes = $start->format('i');
if ($currentMinutes > 15) {
$start->setTime(($start->format('H') + 1), 15);
} elseif($currentMinutes < 15) {
$start->setTime($start->format('H'), 15);
}
$end = new DateTime("2015-05-16 17:00");
$interval = new DateInterval('PT15M');
$period = new DatePeriod($start, $interval, $end);
$current_date = date('d-M-Y g:i:s A');
$current_time = strtotime($current_date);
foreach ($period as $dt)
{
echo $dt->format('H:i')."<br>";
}
或者,如果你喜欢简短的话:
$start = new DateTime("2015-05-16 13:15");
$currentMinutes = $start->format('i');
$currentHour = $start->format('H');
$start->setTime(($currentMinutes > 15 ? ++$currentHour : $currentHour), 15);
[...]
$min15InSecs = 15*60;
$min15 = time()-(time()%$min15InSecs)+$min15InSecs;
$start = new DateTime(date("Y-m-d H:i", $min15));
$start->add(new DateInterval('PT1H'));
$end = new DateTime("2015-05-16 19:00");
$interval = new DateInterval('PT15M');
$period = new DatePeriod($start, $interval, $end);
$current_date = date('d-M-Y g:i:s A');
$current_time = strtotime($current_date);
foreach ($period as $dt)
{
echo $dt->format('H:i')."<br>";
}
您可以像这样将数字限制在下一个 15 的倍数:
ceil($num / 15) * 15
如上所述调整 $start
日期。示例:
$start = new DateTime("today 14:12"); // 2015-05-16 14:12:00
$hour = (int) $start->format("H"); // 14
$minute = (int) $start->format("i"); // 12
$clamped = ceil($minute / 15) * 15; // 15
$start->setTime($hour, $clamped); // 2015-05-16 14:15:00
setTime
注意:超出范围的值会添加到它们的父值中。