显示一周中除周日以外的日期列表


Show list of days of week except Sunday

我试图显示一周中不包括周日的日期列表。列表上的第一天应该是今天的任何一天,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>';

}

这是对进行编码的糟糕方法

while(true)

这总是评估为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++;
}

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

  • 要获取当前日期,请使用time函数
  • 要获得一周中当前日期的数字表示,请使用值为'w'date函数作为第一个参数。它将返回周日的0到周六的6
  • 要获取下一个日期,请使用(24 * 60 * 60)添加当前日期。这将是86400秒,也就是从当前时间算起的1天。值24表示小时,第一个60表示分钟,最后一个60表示秒
  • 若要获取一周中当前日期的名称,请使用值为'l'(字母L的小写)的date函数作为第一个参数

Nuff说,这里的功能:

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)更改为while (count($days) < 6)

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

$days = weekDaysFromToday();
$active = ' class="active"';
echo "<ul class='"nav nav-tabs'">'n";
foreach ($days as $day) {
  echo "<li$active><a href='"#$day'" data-toggle='"tab'">$day</a></li>'n";
  $active = '';
}
echo '</ul>';

你来了,希望能有所帮助。

这在更简洁的格式中是一样的:

$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从今天开始循环一周。