问候消息未更改PHP

时间:2019-04-26 08:34:19

标签: php

我正在使用php编写问候消息的代码。及其正确的。但不更改消息。只有一条消息显示为“早上好”。还有另一种为问候消息或编写代码的方法。我可以更改我的代码吗?请帮忙。

<?php 
function greeting_msg()
{
    $hour = date('h');

    if ($hour >= 20) {
        echo "Good Night!";
    } elseif ($hour > 17) {
        echo "Good Evening!";
    } elseif ($hour > 11) {
        echo "Good Afternoon!";
    } elseif ($hour < 12) {
        echo "Good Morning!";
    }
}
?>

4 个答案:

答案 0 :(得分:2)

与PHP date function的文档有关,您的代码不正确。

date('H'); // 24 hours with leading zeros
date('h'); // 12 hours with leading zeros
date('G'); // 24 without leading zeros

因此,您的代码最终以不超过12的值结尾,这是正确的,“早上好!”显示消息。

接下来,您必须检查$hour变量的值。只需使用类似于以下代码的代码来转储值...

echo "<pre>";
var_dump($hour);
echo "</pre>";

只要PHP date()函数以给定格式返回字符串,就可能会遇到一些问题。

date('h'); // could be '03' ('03' != 3)
date('H'); // could also be '03' ('03' != 3)
date('G'); // results into '3' (3 == 3)

然后查看您的if / else条件。期望值是否符合您的条件?猜值为20

20符合您的前三个条件。第一个条件被执行,因此您将获得预期的结果“晚安!”。

只需以这种方式测试您的代码即可。

答案 1 :(得分:1)

首先,您需要更改| src -> main -> java -> com.myproject -> domain -> config -> service -> controller 而不是f1 x y z = if x > y then f1 (x+2) (y-1) z else y f2 x y z = if z /= 0 then y + x + f2 (x-1) (y-1) (z-2) else 1 f3 x y z = if y < 0 then True else (f3 (f3 (x-2) (y-4) (z-6)) (4*y) (z-2)) + (f3 6 (y-2) (z*2)) f4 x y z = if z > 0 then (f4 (x-y) (y+1) (x-z)) + (f4 2 x z) else y+x- (2*z) 来获得24小时服务,即

H

然后您需要再添加一些条件以获取正确的消息

h

答案 2 :(得分:0)

我已经对您的代码进行了小测试,这就是我们所拥有的

function greeting_msg($hour)
{
    $hour = $hour ?: date('H');
    if ($hour >= 20) {
        return "Good Night!";
    } elseif ($hour > 17) {
        return "Good Evening!";
    } elseif ($hour > 11) {
        return "Good Afternoon!";
    } elseif ($hour < 12) {
        return "Good Morning!";
    }
}

$hoursRange = range(1, 24); // contain range between 1 to 24
foreach ($hoursRange as $range) {
    echo sprintf('For %d message is: %s <br>', $range, greeting_msg($range));
}

您的情况输出是

For 1 message is: Good Morning! 
For 2 message is: Good Morning! 
For 3 message is: Good Morning! 
For 4 message is: Good Morning! 
For 5 message is: Good Morning! 
For 6 message is: Good Morning! 
For 7 message is: Good Morning! 
For 8 message is: Good Morning! 
For 9 message is: Good Morning! 
For 10 message is: Good Morning! 
For 11 message is: Good Morning! 
For 12 message is: Good Afternoon! 
For 13 message is: Good Afternoon! 
For 14 message is: Good Afternoon! 
For 15 message is: Good Afternoon! 
For 16 message is: Good Afternoon! 
For 17 message is: Good Afternoon! 
For 18 message is: Good Evening! 
For 19 message is: Good Evening! 
For 20 message is: Good Night! 
For 21 message is: Good Night! 
For 22 message is: Good Night! 
For 23 message is: Good Night! 
For 24 message is: Good Night! 

这意味着您的系统从01:00开始说“早安”,这是不正确的。我对您的情况做了一些小的改动:

function greeting_msg()
{
    $hour = date('H');
    if ($hour >= 20 || $hour < 5) {
        return "Good Night!";
    } elseif ($hour > 17) {
        return "Good Evening!";
    } elseif ($hour > 11) {
        return "Good Afternoon!";
    } else {
        return "Good Morning!";
    }
}

我不知道05:00是某个人的早晨,但我已经将其设置为:)现在从20:00到05:00的范围显示“晚安”。

此外,请不要忘记服务器时间可以与您的时区不同。

答案 3 :(得分:0)

date('h')date('H')之间的区别在于,一个使用24小时制(H),另一个使用12小时制(h) 。因此,当您执行date('h')时,您将始终获取0到12之间的值。

根据日期手册,

| Format | Description                                      | Values        |
|--------|--------------------------------------------------|---------------|
| h      |  12-hour format of an hour with leading zeros    | 01 through 12 |
| H      |  24-hour format of an hour with leading zeros    | 00 through 23 |

这意味着您所描述的行为是正确的,因为date('h')不会超过12,并且您正在检查date('h') < 12,该条件将始终为真。

使用date('H'),下面显示了一些小的调整(我们回显了函数的结果,而不是在函数内部,并且进行了一些逻辑更改以简化可读性。)

function greeting_msg() {
    $hour = date('H');

    if ($hour > 20 || $hour < 5) { 
        return "Good night"; 
    } elseif ($hour > 17) {
        return "Good evening";
    } elseif ($hour > 12) {
        return "Good afternoon";
    } else {
        return "Good morning";
    }
}
echo greeting_msg();