-1

可能重复:
Php.Advance 每周日历一周

我编写了一个脚本,该脚本每周显示一个日历,用户可以选择一次后退或前进一周。一切都很好,除了每年的第一周仍然显示错误的年份并且 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>

任何帮助将不胜感激

4

2 回答 2

0

这与您提供的格式有关date()。具体来说W

来自PHP 文档

ISO-8601 年中的周数,从星期一开始的周数

这是巧合,因为 2012 年 12 月 31 日是星期一

您应该重写代码以使用其他方法来计算日期。我建议不要信任表单数据。

于 2012-09-04T17:29:37.250 回答
0

正如原始问题的答案中所建议的那样,您不需要使用周数和年数的东西。

如果在一天结束时,您希望能够列出一周的 7 天,根本不要使用这部分代码:

$week_number = date("W", $display_week_ts);
$year = date("Y", $display_week_ts);

echo $week_start.' '.$week_number.' '.$year;

并用原始问题中建议的循环替换回显的循环。

于 2012-09-04T17:33:51.173 回答