Php 将分钟添加到时间列表中
我在如何构建给定倍数的增量时遇到了问题。我希望有一个函数,它将采用3个参数(开始、结束、偏移),并将给我一个输出: 以下功能的启动时间为0900,停止时间为1200,增量为30分钟的倍数 有人能帮我从正确的方向开始吗?我本想用时间来做这件事,但我没法让它工作Php 将分钟添加到时间列表中,php,Php,我在如何构建给定倍数的增量时遇到了问题。我希望有一个函数,它将采用3个参数(开始、结束、偏移),并将给我一个输出: 以下功能的启动时间为0900,停止时间为1200,增量为30分钟的倍数 有人能帮我从正确的方向开始吗?我本想用时间来做这件事,但我没法让它工作 myfunction(9, 12, 30) 输出: 9:00 am 9:30 am 10:00 am 10:30 am 11:00 am 11:30 am 12:00 am 我将使用时间创建dateTime对象。您可以仅使用时间部分格式
myfunction(9, 12, 30)
输出:
9:00 am
9:30 am
10:00 am
10:30 am
11:00 am
11:30 am
12:00 am
我将使用时间创建dateTime对象。您可以仅使用时间部分格式化输出,因此日部分是不相关的。然后,您可以使用标准函数来添加时间间隔(其中一些在中讨论)。只需在时间加法上循环,直到达到或超过结束时间 这还将处理各种特殊情况,否则您将不得不自己处理,例如AM/PM转换和开始时间晚于结束时间(这将一直延续到第二天) 功能:
function myfunction($start, $end, $step){
$start *= 3600; // 3600 seconds per hour
$end *= 3600;
$step *= 60; // 60 seconds per minute
for($i = $start; $i <= $end; $i += $step)
echo date('h:i a', $i), '<br />';
}
是PHP中处理日期和时间的另一个有用函数
PHP手册是一个很好的起点,可以帮助您了解如何自己动手并利用内置函数。在该页面中,如果您搜索“time”,您将找到内置于PHP中的扩展。您将看到在PHP中有许多处理日期和时间的函数。
<?php
function intervals($start, $end, $interval)
{
$start_date = strtotime($start.':00:00');
$end_date = strtotime($end.'00:00');
$current_date = $start_date;
while($current_date <= $end_date)
{
echo $current_date;
$current_date = strtotime('+ '.intval($interval).' minute', $current_date);
}
}
?>
我想这就是你要找的东西。。(未经测试)这是我的想法
function myfunction($start, $end, $min_increm) {
//just get a datetime do not matter the date
$date = new DateTime('2000-01-01');
//move to start hour, add 9 hour
$start_date = $date->add(new DateInterval(PT{$start}H));
$end date_date = $date->add(new DateInterval(PT{$end}H));
while($date <= $end_date)
//increment minutes and print
echo($date->add(new DateInterval(PT{$min_increm}M))->format("H:m"));
function myfunction($start、$end、$min\u increm){
//只需要一个日期时间不在乎日期
$date=新的日期时间('2000-01-01');
//移动到开始时间,添加9小时
$start_date=$date->add(新的日期间隔(PT{$start}H));
$end date_date=$date->add(新的日期间隔(PT{$end}H));
而($dateadd(newdateinterval(PT{$min_increm}M))->格式(“H:M”);
}那么问题是什么?我们现在需要为你做你的工作?还是什么?我想是的,帕斯卡尔维格默特。谢谢你的片段。我看看我能不能把它修好。谢谢你告诉我你是如何做到这一点的。如果你需要帮助,请告诉我;)谢谢你,保罗。是的,你说得对,那是我的错别字。我来试试。保罗,谢谢你。不管我怎么尝试,它都不会给我正确的结果。不过,我的思路是正确的,因为我还使用了mktime和for循环。我会研究你的代码,希望我能学到一些东西。:)谢谢again@Muzz我采纳了另一条评论的建议,删除了mktime。用一个简单的乘法将小时转换成秒就可以了。保罗,我能问你一些关于你的片段我不明白的事情吗?这有什么用<代码>*=
$x*=$y
是$x=$x*$y
的缩写。所以在上面它是$step=$step*60的缩写代码>(乘法和赋值)。实际上,它只是将左侧的变量乘以右侧的值。
function myfunction($start, $end, $min_increm) {
//just get a datetime do not matter the date
$date = new DateTime('2000-01-01');
//move to start hour, add 9 hour
$start_date = $date->add(new DateInterval(PT{$start}H));
$end date_date = $date->add(new DateInterval(PT{$end}H));
while($date <= $end_date)
//increment minutes and print
echo($date->add(new DateInterval(PT{$min_increm}M))->format("H:m"));