PHP If / else оператор с форматированной датой для определения части дня

Я пытаюсь сделать простое утверждение if / else в PHP. Что-то простое, как это:

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

Проблема в том, что значение, которое я получаю из базы данных, имеет неформатированный формат времени (например, 2014-09-08 06: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

Решение

<?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, вам нужен только результат используемого вами метода.

6

Другие решения

Я бы не использовал DateTime для чего-то такого простого.
Вот что я бы сделал:

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

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

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]);
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
По вопросам рекламы [email protected]