2012-03-29 6 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 Manual의 function reference은 스스로 일을하고 내장 함수를 이용하는 방법을 찾을 때 시작할 수있는 좋은 곳입니다. 해당 페이지에서 '시간'을 검색하면 PHP에 내장 된 Date/Time 확장자를 찾을 수 있습니다. PHP에서 날짜와 시간을 다루는 데 사용할 수있는 많은 함수가 있음을 알 수 있습니다.

+0

폴 감사합니다. 예, 당신 말이 맞아요, 그건 제 실수입니다. 나는 이것을 시도 할 것이다. – Muzz

+0

Paul, 고맙습니다. 아무리 노력해도 올바른 결과를 얻지 못했습니다. 나는 mktime과 for 루프를 사용하고 있었기 때문에 올바른 방향이었다. 나는 당신의 코드를 공부하고 잘하면 내가 배울 게. :) Thanks again – 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")); 

}