显示除星期日以外的星期几

时间:2013-11-23 22:15:40

标签: php

我正在尝试显示除星期日之外的星期几列表。列表中的第一天应该是今天的任何一天,CSS类为“active”。如果今天=星期日,第一个列表项应该是星期一。

以下是我正在使用的代码。问题是,这将从今天(包括星期日)开始输出前6天,然后从今天开始输掉第7天。

知道我需要改变什么才能让它在周日跳过?

function daysofweek() {

$datetime = new \DateTime();

$listItem = array('<li class="active"><a href="#', '" data-toggle="tab">', '</a></li>');

$i = 0;

echo '<ul class="nav nav-tabs">';

    while (true) {
        if ($i === 6) break;

        if ($datetime->format('N') === '7' && $i === 0) {
            $datetime->add(new \DateInterval('P1D'));
            continue;        
        }

        $the_day = $datetime->format('D');

        echo $listItem[0] . $the_day . $listItem[1] . $the_day . $listItem[2];
        $listItem = array('<li><a href="#', '" data-toggle="tab">', '</a></li>');    

        $datetime->add(new \DateInterval('P1D'));
        $i++;
    }

echo '</ul>';

}

3 个答案:

答案 0 :(得分:2)

这是一种不好的编码方式

while(true)

此ALWAYS评估为true。即使使用break,这也是一种糟糕的语法。您的while应该包含逻辑。所以这是你的代码,重组了。我删除了对add()的重复调用,并使其在每次迭代时都运行。循环自然也会终止。

$i = 0;
while($i < 7) {
    $the_day = $datetime->format('N');
    if($the_day != 7) {
         echo $listItem[0] . $the_day . $listItem[1] . $the_day . $listItem[2];
         $listItem = array('<li><a href="#', '" data-toggle="tab">', '</a></li>');      
    }
    $datetime->add(new \DateInterval('P1D'));
    $i++;
}

答案 1 :(得分:1)

我更喜欢创建一个返回数组的函数,而不是在其中写入输出。我先解释一下:

  • 要获取当前日期,请使用time功能。
  • 要获取当周某一天的数字表示,请使用值为date的{​​{1}}函数作为第一个参数。它将在星期日通过'w'返回0星期六。
  • 要获取下一个日期,请使用6添加当前日期。那将是86,400秒或从当前时间开始的1天。值(24 * 60 * 60)表示小时,第一个24表示分钟,最后一个60表示秒。
  • 要获取当周某一天的名称,请使用值为60的{​​{1}}函数(字母date的小写字母)作为第一个参数。

Nuff说,这是函数:

'l'

如果您希望在列表末尾不重复当天,则应将L更改为function weekDaysFromToday() { $days = array(); $date = time(); while (count($days) < 7) { $date += (24 * 60 * 60); if (!date('w', $date)) continue; $days[] = date('l', $date); } return $days; }

这是使用上面代码渲染数组的代码:

while (count($days) < 7)

你有,希望它有所帮助。

答案 2 :(得分:0)

这种格式更加简洁:

$today = date('w');
$first = 1;
for($i=$today; $i<$today+7; $i++){
    if($i%7) echo "<li ".($first ? "class='active'" : '').">".date('D', strtotime("Sunday +".($i%7)." days"))."<li>";
    $first=0;
}

它的工作方式是使用模%7来循环一周,从今天开始。