Php 基于时间的梯度背景

Php 基于时间的梯度背景,php,Php,尝试根据php时间获得要显示的正确渐变颜色。当我尝试时,渐变不匹配,即第一个小时块的topcolor和第四个小时块的bottomcolor一起匹配 <?php $time = date("H"); if( $time >= 06 && $time < 12 ) $topcolor = 'black'; $bottomcolor = 'orange'; if( $time >= 12 && $time < 18 ) $topcolo

尝试根据php时间获得要显示的正确渐变颜色。当我尝试时,渐变不匹配,即第一个小时块的topcolor和第四个小时块的bottomcolor一起匹配

<?php 
$time = date("H"); 
if( $time >= 06 && $time < 12 )
$topcolor = 'black';
$bottomcolor = 'orange';
if( $time >= 12 && $time < 18 )
$topcolor = 'pink';
$bottomcolor = 'purple';
if( $time >= 18 && $time < 24 )
$topcolor = 'yellow';
$bottomcolor = 'blue';
if( $time >= 24 && $time < 6 )
$topcolor = 'red';
$bottomcolor = 'green';
?>

<style>
body {
background: <?php echo $bottomcolor;?>;
background: -webkit-linear-gradient(<?php echo $topcolor;?>, <?php echo $bottomcolor;?>) <?php echo $bottomcolor;?>;
background: -o-linear-gradient(<?php echo $topcolor;?>, <?php echo $bottomcolor;?>) <?php echo $bottomcolor;?>;
background: -moz-linear-gradient(<?php echo $topcolor;?>, <?php echo $bottomcolor;?>) <?php echo $bottomcolor;?>;
background: linear-gradient(<?php echo $topcolor;?>, <?php echo $bottomcolor;?>) <?php echo $bottomcolor;?>;
background-repeat: no-repeat;
}
</style>

您需要将每个if条件后面的语句用大括号括起来:

if( $time >= 06 && $time < 12 )
$topcolor = 'black';
$bottomcolor = 'orange';
->

如果省略这些,则只计算第一条语句。看

最后一个$bottomcolor生效的原因是,不管$time值是多少,该变量的所有赋值都在运行,并且最后一个赋值优先。

从an if语句中可以看出:

if (expression) 
    statement
关于:

语句可以是赋值、函数调用、循环、条件语句,甚至是不执行空语句的语句。语句通常以分号结尾。此外,通过用大括号封装一组语句,可以将语句分组到一个语句组中。语句组本身也是一个语句

根据我们刚刚获得的新智慧,您的代码与此相同,缩进并不重要,它只是为了美观:

$time = date("H"); 
if ($time >= 06 && $time < 12)
    $topcolor = 'black';
$bottomcolor = 'orange';
if ($time >= 12 && $time < 18)
    $topcolor = 'pink';
$bottomcolor = 'purple';
if ($time >= 18 && $time < 24)
    $topcolor = 'yellow';
$bottomcolor = 'blue';
if ($time >= 24 && $time < 6)           // <--- this condition is impossible
    $topcolor = 'red';
$bottomcolor = 'green';

您需要使用大括号*来包含条件块。如果{code}。如果你还有其他一些问题,那么你也应该考虑使用else。没有任何东西会小于6而大于24。当06==6时,您不应该养成在整数上加0前缀的习惯,因为016==14,在加0前缀时使用的是八进制。将06改为6,最后一个if中的24改为0。还为每个条件添加了括号。您认为代码可以很好地处理这些更改吗?我担心from=0的切换——后台切换是否会消失?好吧,您可以稍微干涸一下代码,使用else if和else,而不是4个单独的if条件,但是如果它工作,那么它就工作了……我想知道当$time<6&&24时,一天中的哪一部分时间是这样的
$time = date("H"); 
if ($time >= 06 && $time < 12)
    $topcolor = 'black';
$bottomcolor = 'orange';
if ($time >= 12 && $time < 18)
    $topcolor = 'pink';
$bottomcolor = 'purple';
if ($time >= 18 && $time < 24)
    $topcolor = 'yellow';
$bottomcolor = 'blue';
if ($time >= 24 && $time < 6)           // <--- this condition is impossible
    $topcolor = 'red';
$bottomcolor = 'green';
$time = date('H');

if ($time < 6) {
    // night
    $topcolor = 'red';
    $bottomcolor = 'green';
} elseif ($time < 12) {
    // morning
    $topcolor = 'black';
    $bottomcolor = 'orange';
} elseif ($time < 18) {
    // afternoon
    $topcolor = 'pink';
    $bottomcolor = 'purple';
} else {
    // evening
    $topcolor = 'yellow';
    $bottomcolor = 'blue';
}