2015-01-22 8 views
1

Я пытаюсь сделать простой оператор if/else в PHP. Просто коснуться, как это:PHP Если оператор/else с форматированной датой определить часть дня

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

Проблема значение я получаю из базы данных неотформатированная формат времени (например: 2014-09-08 6:00:00). Я могу отформатировать эту дату, используя:

$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"; 
} 
?> 

я теперь это не работает, потому что я пытаюсь использовать форматированный дату в качестве переменной, которая не работает. Есть ли другой способ определить часть дня с использованием форматированной даты?

С уважением, 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

Кроме того, первые две строки и часть оператора 'if' могут быть сжаты:' $ hour = date ("H", strtotime ("2014-09-08 06:00:00")); if ($ hour <12) ... ' –

+0

@LightnessRacesinOrbit Создание экземпляра класса в PHP в целом дорого. – JokiRuiz

0

Может быть, не самый лучший способ, но вы также можете получить значение с помощью PREG матча:

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