可能重复:
Php。提前周日历一周
我已经编写了一个脚本,它每周显示一个日历,用户可以选择一次返回或前进一周。一切都很好,除了每年的第一周仍然显示错误的年份,12月31日显示为02/01。似乎只有第1周受到影响,本周及以后的日期再次正确
<?
if(isset($_POST['add_week'])){
$last_week_ts = strtotime($_POST['last_week']);
$display_week_ts = $last_week_ts + (3600 * 24 * 7);
} else if (isset($_POST['back_week'])) {
$last_week_ts = strtotime($_POST['last_week']);
$display_week_ts = $last_week_ts - (3600 * 24 * 7);
} else {
$display_week_ts = floor(time() / (3600 * 24)) * 3600 * 24;
}
$week_start = date('d-m-Y', $display_week_ts);
$week_number = date("W", $display_week_ts);
$year = date("Y", $display_week_ts);
echo $week_start.' '.$week_number.' '.$year;
?>
<table name="week">
<tr>
<?
for($day=1; $day<=7; $day++)
{
echo '<td>';
echo date('d-m-Y', strtotime($year."W".$week_number.$day))." | 'n";
echo '</td>';
}
?>
</tr>
<tr>
<form name="move_weeks" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="hidden" name="last_week" value="<? echo $week_start; ?>" />
<td colspan="7"><input type="submit" name="back_week" value="back_week" /><input type="submit" name="add_week" value="add_week" />
</td>
</form>
</tr>
</table>
如有任何帮助,将不胜感激
正如原问题答案中所建议的,您不需要使用周数和年数。
如果在一天结束时,你想列出一周中的七天,就不要使用这段代码:
$week_number = date("W", $display_week_ts);
$year = date("Y", $display_week_ts);
echo $week_start.' '.$week_number.' '.$year;
并用原问题中建议的循环替换回声突出的循环。
这与您提供的date()
格式有关。特别是CCD_ 2。
从PHP文档:
ISO-8601年的周数,从周一开始的周数
这是巧合,因为2012年12月31日是星期一。
您应该重写代码以使用其他方式计算日期。我建议不要相信表单数据。