-1

重複の可能性:
Php.Advanceウィークリーカレンダー1週間

ユーザーが一度に1週間前後に移動することを選択できる、週ごとのカレンダーを表示するスクリプトを作成しました。毎年の最初の週がまだ間違った年を表示し、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

元の質問への回答で示唆されているように、週番号と年番号のものを使用する必要はありません。

1日の終わりに、週の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 に答える