Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将分钟添加到时间列表中_Php - Fatal编程技术网

Php 将分钟添加到时间列表中

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对象。您可以仅使用时间部分格式

我在如何构建给定倍数的增量时遇到了问题。我希望有一个函数,它将采用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对象。您可以仅使用时间部分格式化输出,因此日部分是不相关的。然后,您可以使用标准函数来添加时间间隔(其中一些在中讨论)。只需在时间加法上循环,直到达到或超过结束时间

这还将处理各种特殊情况,否则您将不得不自己处理,例如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"));