2015-01-22 1 views
1

PHP에서 if/else 문을 단순화하려고합니다. 이런 간단한가 someting : 나 데이터베이스로부터 수신 값은 포맷되지 않은 시간 형식 (: 2014년 9월 8일 6시 0분 0초 등)이다PHP 하루 중 일부를 결정하는 형식화 된 날짜가있는 If/else 문

<?php 
$time = 13; 
if ($time < 12) { 
    echo "Morning"; 
} else { 
    echo "Afternoon or evening"; 
} 
?> 

문제가된다. 다음 날짜를 사용하여이 날짜 형식을 지정할 수 있습니다.

$time->format('H'); 

일, 월 및 연도의 날짜를 삭제합니다. 그러나 이것을 변수로 사용할 수는 없습니다.

<?php $deliverytime = new DateTime('2014-09-08 06:00:00'); 
$deliverytime->format('H'); 
if ($deliverytime < 12) { 
    echo "Morning"; 
} else { 
    echo "Afternoon or evening"; 
} 
?> 

i가 작동하지 않습니다 변수로 포맷 된 날짜를 사용하는 것을 시도하고 있기 때문에 지금이 작동하지 않습니다 : 이것은 내가 할 노력하고 있어요 것입니다. 포맷 된 날짜를 사용하여 하루 중 일부를 결정하는 또 다른 방법이 있습니까?

감사합니다, Matthijs

+1

_ "포맷되지 않은 시간 형식 (같은 : 2014-09를 -08 06:00:00) "_ 나에게 꽤 형식화 된 것 같습니다! –

답변

6
<?php 
    $deliverytime = new DateTime('2014-09-08 06:00:00'); 
    $hour = $deliverytime->format('H'); 
    if ($hour < 12) { 
     echo "Morning"; 
    } else { 
     echo "Afternoon or evening"; 
    } 
?> 

$deliverytime->format()는 포맷 된 날짜를 반환하는 방법입니다 당신은 쇼 위의 코드로, 어떤 메소드의 반환을 사용하는 곳에 보관해야합니다.

그렇기 때문에 전체 개체를 if 문에 전달하면 사용중인 메서드의 결과 만 필요합니다.

+1

이것은 데이터베이스에서 제공하는 거의 모든 시간 형식을 허용 할 수있는 적절한 솔루션입니다 (OP가 설명한 바와 같습니다). – AnotherGuy

+0

고맙습니다. 이걸로 머리를 부러 뜨 렸어. – user3166736

0

하지만 당신은 예 당신이 할 수있는 변수

로 사용할 수 없습니다. 이것은 잘 작동합니다 :

<?php 
    $deliverytime = new DateTime('2014-09-08 06:00:00'); 
    $hour = (int) $deliverytime->format('H'); 

    if ($hour < 12) { 
     echo "Morning"; 
    } else { 
     echo "Afternoon or evening"; 
    } 
?> 
+0

변수를 포맷 한 후 저장하는 것을 잊었습니다. 내 잘못이야. 도와 주셔서 감사합니다. – user3166736

0

저는 너무 쉽게 DateTime을 사용하지 않을 것입니다. 이 내가 할 것 인 것이다 :

어쩌면
$date = "2014-09-08 06:00:00"; 
$date = strtotime($date); 
if (date('H', $date) < 12){ 
    echo "Morning"; 
} else { 
    echo "Afternoon or evening"; 
} 
+0

왜 안 되니? 그것은 우수한 솔루션입니다. –

+0

또한 첫 번째 2 행과'if' 문 일부는 압축 될 수 있습니다 :'$ hour = date ("H", strtotime ("2014-09-08 06:00:00")); if ($ hour <12) ... ' –

+0

@LightnessRacesinOrbit PHP에서 클래스 인스턴스를 생성하는 것은 일반적으로 비용이 많이 든다. – JokiRuiz

0

하지 않는 가장 좋은 방법,하지만 당신은 또한 레그로 경기를 사용하여 값을 얻을 수 있습니다 :

preg_match('/[0-9]{4}\-[0-9]{2}-[0-9]{2} 0?([0-9]+)\:[0-9]{2}\:[0-9]{2}/', $date, $match); 
$hour = intval($match[1]);