将分钟添加到列表中

时间:2012-03-29 20:38:02

标签: php

我在解决如何构建按给定倍数增加的时间方面遇到了问题。我想有一个函数,需要3个参数,(开始,结束,偏移),这将给我一个输出:

以下功能的开始时间为0900,停止时间为1200,并以30分钟的倍数增加。

有人请让我开始正确的方向吗?我想用mktime这个但是我无法让它工作。

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

4 个答案:

答案 0 :(得分:2)

功能:

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 />';   
}

输出:

09:00 am
09:30 am
10:00 am
10:30 am
11:00 am
11:30 am
12:00 pm // You put am here in desired output
         // ,but I think you really wanted pm

Codepad

strtotime是另一个在PHP中处理日期和时间的有用函数。

PHP手册的function reference是一个很好的起点,可以在寻找如何自己做事并利用内置函数时开始。在该页面中,如果您搜索“时间”,您将找到内置于PHP的Date/Time扩展名。您将看到有许多函数可用于处理PHP中的日期和时间。

答案 1 :(得分:0)

我会用时间来创建一个dateTime对象。您可以仅使用时间部分格式化输出,因此日期部分无关紧要。然后,您可以使用标准函数来添加时间间隔(其中一些在this question中讨论)。只需循环添加时间,直到达到或超过结束时间。

这也将处理您自己必须处理的各种特殊情况,例如AM / PM转换和开始时间晚于结束时间(将仅包裹到第二天) )。

答案 2 :(得分:0)

<?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);
        }
    }
?>

我猜这样的事情就是你要找的......(未经测试)

答案 3 :(得分:0)

这是我的想法

 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"));

}