Php 问候语不会改变

Php 问候语不会改变,php,Php,我正在使用php编写问候语的代码。这是正确的。但不改变信息。只有一条信息显示“早上好”。还有另一种编写问候语或短信代码的方法。我可以修改我的代码吗?怎么做?请帮忙 <?php function greeting_msg() { $hour = date('h'); if ($hour >= 20) { echo "Good Night!"; } elseif ($hour > 17) { echo "Good Even

我正在使用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!";
    }
}
?>

与PHP文档相关,您的代码不正确

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>";
然后查看您的if/else条件。期望值是否符合您的条件?猜测值为
20

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


用这种方法测试你的代码。

首先,你需要改变
H
而不是
H
来获得24小时,即

$hour = date('H');
if ($hour > 5 && $hour < 10) {
    echo 'Good Morning';
} elseif ($hour > 11 && $hour < 17) {
    echo 'Good Afternoon';
} elseif ($hour > 17 && $hour < 20) {
    echo 'Good Evening';
} else {
    echo 'Good Night';
}
die;
然后,您需要再添加几个条件来获得正确的消息

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));
}
$hour=日期('H');
如果($hour>5&&$hour<10){
回声“早上好”;
}其他($hour>11&$hour<17){
回声“下午好”;
}其他($hour>17&$hour<20){
回声“晚上好”;
}否则{
回音“晚安”;
}
死亡

我对您的代码进行了一些小测试,下面是我们的测试结果

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开始说“早上好”,这是不对的。我对你的情况做了一些小的改变:

| 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 |
函数问候语_msg()
{
$hour=日期('H');
如果($hour>=20 | |$hour<5){
回答“晚安!”;
}elseif($h>17){
返回“晚上好!”;
}elseif($hour>11){
回复“下午好!”;
}否则{
回复“早上好!”;
}
}
我不知道05:00对某人来说是早上,但我已经设定了:)现在从20:00到05:00的范围显示“晚安”


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

日期(
h')
和日期(
h')
之间的区别在于,一个使用24小时格式(
h
),另一个使用12小时格式(
h
)。因此,当您执行
日期('h')
时,您将始终获得0-12之间的值

从日期手册中

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();
这意味着您描述的行为是正确的,因为
date('h')
将不超过12,并且您正在检查
date('h')<12
,这是一个始终为真的条件

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

函数问候语_msg(){
$hour=日期('H');
如果($hour>20 | |$hour<5){
返回“晚安”;
}elseif($h>17){
返回“晚上好”;
}elseif($h>12){
返回“下午好”;
}否则{
返回“早上好”;
}
}
回音问候语_msg();
  • 我们模拟24小时工作的所有小时的测试

当?
H
为24小时格式时,不更改消息<代码>h用于12小时格式(上午/下午)。因此,
date('h')
将始终为您提供不大于12的值。您需要
日期('H')
只要
date()
返回给定格式的字符串,使用
h
h
格式的前导零就会出现问题。而不是使用
G
作为基于24小时的格式,不带前导零。耶!但我改变了,尝试了H和H。不工作。我需要更改代码的行是什么?您能回显
$hour
变量吗?另外,如何检查消息是否正确?您是否更改了计算机时间或服务器时间,或者此应用程序只是本地的?@TharukaDananjaya请记住,这取决于服务器上的时间。如果服务器时间介于午夜和中午之间,它仍将显示该时间<代码>日期('H')也可以。谢谢您的回复。更改我的计算机时间并重新加载页面。但是早上好。
$hour
的价值是多少?正如Koen之前所说,在这种情况下,了解价值是很重要的。该值是否为预期值?如果某个条件失败,它将尝试下一个条件。所以你不需要把它弄得这么复杂,只需要从上到下尝试一下,也就是说,
if($hour>20 | |$hour<5){Night}elseif($hour>17){Night}elseif{$hour>12){Night}elseif{Night}elseif{Night}elseif{Night}elseif{$hour>12){Night}else{morning}
.M.Hemant感谢您的回复。现在时间是下午2点24分,但显示的信息是晚安。仍然存在这个问题。请告诉我您当前的时区,我的是date\u default\u timezone\u set('Asia/Kolkata');//印度时间及其显示
午安
现在计算机时区是(UTC+05:30) SriJayawardenepura@Qirel你能告诉我它什么时候会失败吗?@Qirel这是对的。我试着更改我的电脑时间并检查它。现在更改消息,但只在早上和晚上。逻辑如下,如果
$hours
介于21-24和0-5之间,那么是晚上。如果介于18-20之间,则是晚上。如果介于13-17之间,则是下午。其他erwise,早上好。请查看我问题中的测试链接以进行演示。它会起作用;-)
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!";
    }
}
| 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 |
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();