我正在使用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!";
}
}
?>
答案 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();
date()