2

私は厳密に PHP のカレンダーに取り組んでいますが、前と次のボタンが正しく機能しません。これまでのところ、月、年、および小さなフォームしかありません。実際のカレンダーはまだ持っていません。フォームは、カレンダーを現在の月と年に移動するボタンで構成されています。月と年のそれぞれのドロップダウン ボックスで、ユーザーが月と年を選択できる送信ボタンがあります。次に、前/次の月に移動するための 2 つのボタン。私のコードは次のとおりです。

<?php
$month_numbers = array(1,2,3,4,5,6,7,8,9,10,11,12);
$months_of_year = array("January","February","March","April","May","June","July","August","September","October","November","December");
$days_of_week = array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
$month = ($_GET['m']) ? $_GET['m'] : date("n");
$current_month = date("n");
$year = ($_GET['y']) ? $_GET['y'] : date("Y");
$current_year = date("Y");
$previous_month = ($month - 1);
$next_month = ($month + 1);
if($month == 0)
{
  $month = 12;
  $year--;
}
if($month == 13)
{
  $month = 1;
  $year++;
}
$month_name = $months_of_year[$month - 1];
$first_day_of_month = new DateTime();
$first_day_of_month -> setDate($year,$month,1);
$first_day_of_month = $first_day_of_month -> format("w");
echo("<form name = 'formCalendar' id = 'formCalendar' action = 'index.php?' method = 'get'>");
echo("  <table border = '1' cellspacing = '0' cellpadding = '2'>");
echo("    <thcolspan = '7'>
            {$month_name} {$year}
            <span class = 'formTopRight'>
              <input type = 'button' value = 'Today' onclick = 'location=\"index.php?m={$current_month}&y={$current_year}\"'/>
              <select name = 'm' id = 'selMonth'>");
for($a = 0; $a < count($months_of_year); $a++)
{
  echo("        <option value = '{$month_numbers[$a]}'>{$months_of_year[$a]}</option>");
}
echo("        </select>");
echo("        <select name = 'y' id = 'selYear'>");
for($b = ($current_year - 10); $b <= ($current_year + 10); $b++)
{
  echo("        <option value = '{$b}'>{$b}</option>");
}
echo("        </select>");
echo("        <input type = 'submit' name = 'dateChange' id = 'dateChange' value = 'Go'/>");
echo("        <input type = 'button' name = 'prev' value = '<<' onclick = 'location=\"index.php?m={$previous_month}&y={$year}\"'/>");
echo("        <input type = 'button' name = 'next' value = '>>' onclick = 'location=\"index.php?m={$next_month}&y={$year}\"'/>");
echo("  </table>");
echo("<form>");
?>

私の Web サイト ( www.rgbwebd.net/tests ) にテスト ファイルとしてアップロードしたので、その動作を自分で確認できます。

4

1 に答える 1

0

簡単な修正方法は、前の年を前に使用する必要があるかどうかを計算することです。これは、前に進むときにすでに行っているためです。

$previous_yearの代わりにそれを利用して使用することができます$year

そのような

'location=\"index.php?m={$previous_month}&y={$previous_year}\"'/>");

上部と同じように計算を行います。

$previous_month = ($month - 1);
$previous_year = $year;
$next_month = ($month + 1);
if($month == 0)
{
  $month = 12;
  $year--;
}
if($month == 13)
{
  $month = 1;
  $year++;
}
if($previous_month == 0)
{
  $previous_month = 12;
  $previous_year--;
}

編集

2つの異なるアクションをサポートするために、1つの変数を使用し、それを早い段階で変更するべきではありません。その$monthため、前のボタンと次のボタンを入力するために使用します。$next_month; $next_year;それらをとに分ける必要があり$previous_month; $previous_year;ます(次と前のボタンの場合)。また、おそらくPHPの日付を調べて、メソッドを使用して月を加算/減算し、出力をフォーマットすることもできます。

于 2013-02-25T20:23:41.757 に答える