PHP If/else 带有格式化日期的语句以确定一天中的部分

PHP If/else statement with formatted date to determine the part of the day

我正在尝试在 PHP 中做一个简单的 if/else 声明。像这样简单的东西:

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

我现在这不起作用,因为我试图将格式化日期用作不起作用的变量。是否有另一种方法可以使用格式化日期来确定当天休息的部分?

此致, 马泰斯

<?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() 是一种 returns 格式化日期的方法,您必须将其存储在某处才能使用该方法 returns,如上面的代码所示。

实际上,您将整个对象传递给 if 语句,您只需要所用方法的结果。

But you can not use this as a variable

是的,你可以。这很好用:

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

我不会将 DateTime 用于如此简单的事情。 这就是我要做的:

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

也许不是最好的方法,但您也可以使用预匹配来获取值:

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