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