2012-03-29 3 views
2

У меня возникли проблемы с тем, как я буду строить время, увеличивающееся на заданный множитель. Я хотел бы иметь функцию, которая будет принимать 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 
+0

Так что это вопрос? Теперь нам нужно сделать вашу работу за вас? Или что? – zerkms

ответ

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 - отличное место для начала, когда вы ищете, как делать что-то самостоятельно и используя встроенные функции. С этой страницы, если вы ищете «время», вы найдете расширение Date/Time, которое встроено в PHP. Вы увидите, что существует множество функций для работы с датами и временем в PHP.

+0

Спасибо, Пол. Да, ты прав, это была опечатка с моей стороны. Я попробую. – Muzz

+0

Paul, спасибо. Независимо от того, как я это пробовал, это не дало бы мне правильных результатов. Я был на правильном пути, потому что я также использовал mktime и цикл for. Я изучу ваш код и, надеюсь, я кое-что узнаю. :) Еще раз спасибо – Muzz

+0

@Muzz Я принял предложение из другого комментария и удалил mktime. Простое умножение для преобразования часов в секунды делает трюк. – Paulpro

0

Я хотел бы использовать время, чтобы создать объект DateTime. Вы можете форматировать свой вывод, используя только временные части, поэтому дневная часть не имеет значения. Затем вы можете использовать стандартные функции для добавления временных интервалов (некоторые из них обсуждаются в this question). Просто зациклируйте время добавления времени до достижения или превышения конечного времени.

Это также позаботится о всех видах особых случаев, которые вам в противном случае придется обрабатывать самостоятельно, таких как AM/PM-преобразование и время начала позже, чем время окончания (которое будет просто перенесено на следующее день).

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

Я думаю, что-то вроде этого, является то, что вы ищете .. (непроверенные)

+0

Думаю, что pascalvgemert. Спасибо за фрагмент. Я посмотрю, смогу ли я заставить это работать. Спасибо, что показали мне, как вы это сделаете. – Muzz

+0

Сообщите мне, если вам нужна помощь;) – pascalvgemert

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

}