同じ質問になってしまいますが、自分でソースを書いたらうまく動きません。デバッグしてくれたら嬉しいです。ポイントはそれなりにお支払いします。
http://q.hatena.ne.jp/1163814335
http://q.hatena.ne.jp/1164007516
この問題でさらに機能をつけたく、例えば今日の日付を取得します。今日が11/23であれば今日の日付を取得します。今日から月末までは$iにリンクをつけて(リンク先はなんでもOK)、1日から今日までの日付は日付($i)はリンクをつけません。リンクは"<td align=\"center\"><A href=XXX>$i</A></td>\n";につけます。このような条件文はどのようにしたらよいでしょうか?
ソースコードは下記のサイトにあります。このソースコードを改造したいと思っていますので、このコードを元にお願いいたします。
http://www.geocities.jp/kingmaskmelon/test.htm
失礼しました。
質問にもう一点、機能の追加がありましたね。
下記に変更例を掲載します。
ただし、drawCalender1 のみリンクの対応をしています。
drawCalender2 に関しては、同様にできると思いますので、そのままに保留してあります。
<?php //function drawCalender1 function drawCalender1( $y ,$m ) { // $dateinfo = getdate(); //YEARとMonthを受け取る $hi = date('j'); // $dateinfo['mday']; //get today's date $mm = date('n'); // $dateinfo['mon']; $yy = date('Y'); // $dateinfo['year']; $t = mktime(0, 0, 0, $m, 1, $y); //$y年$m月1日のUNIXTIME 日付情報の作成 $w = date( 'w', $t ); //1日の曜日(0:日~6:土)その月の曜日を求める $n = date( 't', $t ); //$y年$m月の日数 print "<TD colspan=7 align=center>"; print $y; print "年"; print $m; print "月"; print "</TD>"; print <<<DAY_TITLE <tr> <TD><FONT color="#ff0000">SUN</FONT></TD> <TD>MON</TD> <TD>TUE</TD> <TD>WED</TD> <TD>THU</TD> <TD>FRI</TD> <TD><FONT color="#0000ff">SAT</FONT></TD> </TR> DAY_TITLE; for( $i = 1 - $w ; $i <= $n + 7 ; $i++ ){ if ( ( ( $i + $w ) % 7 ) == 1 ) { print "<tr>\n"; } switch ( ( $i + $w ) % 7 ) { case 0 : $tdClass = '"saturday"'; break; case 1 : $tdClass = '"sunday"'; break; default : $tdClass = '"weekday"'; break; } if ( ( 0 < $i ) && ( $i <= $n ) ) { //1日から月の終わりまで if( mktime( 0, 0, 0, $m, $i, $y ) > mktime( 0,0,0, $mm, $hi, $yy ) ) { //リンク分岐 case0は土曜 print "<td class=$tdClass align=\"center\"><A href='form2-2.php?year=$y&month=$m&day=$i'>$i</A></td>\n"; }else { print "<td class=$tdClass align=\"center\">$i</A></td>\n"; } } else { print "<td class=$tdClass> </td>\n"; } if ((( $i + $w ) % 7 ) == 0 ) { print "</tr>\n"; if ( $i >= $n ) { break; } } } print "</table>\n"; } //function drawCalender2 function drawCalender2( $y ,$m ) { $t = mktime(0, 0, 0, $m, 1, $y); //$y年$m月1日のUNIXTIME 日付情報の作成 $w = date('w', $t); //1日の曜日(0:日~6:土)その月の曜日を求める $n = date('t', $t); //$y年$m月の日数 if($m==12){ $m=1; $y=$y+1; }else{ $m=$m+1; } print "<TD colspan=7 align=center>"; print $y; print "年"; print $m; print "月"; print "</TD>"; print <<<DAY_TITLE <tr> <TD><FONT color="#ff0000">SUN</FONT></TD> <td>MON</td> <td>TUE</td> <td>WED</td> <td>THU</td> <td>FRI</td> <TD><FONT color="#0000ff">SAT</FONT></TD> </tr> <tr> DAY_TITLE; for( $i = 1 - $w ; $i <= $n + 7 ; $i++ ){ if ( ( ( $i + $w ) % 7 ) == 1 ) { print "<tr>\n"; } if ( ( 0 < $i ) && ( $i <= $n ) ) { switch ( ( $i + $w ) % 7 ) { case 0: print "<td class=\"saturday\" align=\"center\"><A href='form2-2.php?year=$y&month=$m&day=$i'>$i</A></td>\n"; break; case 1: print "<td class=\"sunday\" align=\"center\"><A href='form2-2.php?year=$y&month=$m&day=$i'>$i</A></td>\n"; break; default : print "<td align=\"center\"><A href='form2-2.php?year=$y&month=$m&day=$i'>$i</A></td>\n"; break; } //switch end } else { print "<td> </td>\n"; } if ((( $i + $w ) % 7 ) == 0 ) { print "</tr>\n"; if ( $i >= $n ) { break; } } } print "</table>\n"; } ?> <?php // データの初期設定 $monthLast = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) ; // うるう年の計算 function uruu($year) { $ret = 28 ; if (($year % 4) == 0) $ret = 29 ; if (($year % 100) == 0) $ret = 28 ; if (($year % 400) == 0) $ret = 29 ; return $ret; if ($getResult==29 && $getMonth==2){ $monthLast[1]=29; } } ?> <HTML> <style type="text/css"> <!-- td.sunday { background-color:#ffcccc;} td.saturday { background-color:#ccffff;} td.weekday { background-color:#ffffff;} --> </style> <BODY> <TABLE border="1"> <TBODY> <?php //第一テーブル drawCalender1(date('Y'),date('n')); ?> </TBODY> </TABLE> <TABLE border="1"> <TBODY> <?php //第二テーブル drawCalender2(date('Y'),date('n')); ?> </TBODY> </TABLE> </BODY> </HTML>
一つ、アドバイスをさせていただくと、関数の外で設定した変数は、通常関数の中で参照できません。
参照したい場合は、関数の最初で
global $y;
のように記述が必要です。
他に問題があれば、回数コメントを有効にするか回答回数を増やしていただければ、補足説明いたします。
原因は、{} の整合が崩れていたためです。
インデントのみ修正:オリジナル
function uruu($year) {
$ret = 28 ;
if (($year % 4) == 0) $ret = 29 ;
if (($year % 100) == 0) $ret = 28 ;
if (($year % 400) == 0) $ret = 29 ;
return $ret;
}
if ($getResult==29 && $getMonth==2){
$monthLast[1]=29;
}
インデント修正後
// うるう年の計算
function uruu($year) {
$ret = 28 ;
if (($year % 4) == 0) $ret = 29 ;
if (($year % 100) == 0) $ret = 28 ;
if (($year % 400) == 0) $ret = 29 ;
return $ret;
if ($getResult==29 && $getMonth==2){
$monthLast[1]=29;
}
}
のような開発環境を使用すると、文法や{}の整合性をチェックしてくれるので、このようなエラーを発見しやすいと思います。
たいした問題ではないので、ポイントは規定値で結構ですよ。
こんにちは、Mook様にはお世話になっております。function uruuは特に使っていなく、いろいろ勉強していたときのコードがそのまま残っていてついていたので、必要がなく、function uruuは削除しましたが、直りません。
今日が28日なので、本来は1日から28日までのリンクが表示されなく、29日から30日までのリンクはさせたいとおもっていますが、直りません。
function drawCalender1( $y ,$m ) { global $hi; ... }
関数の内部で $hi をグローバル宣言してみてはどうでしょうか。
関数の外部で宣言した変数を関数の内部で有効にするには グローバル宣言する必要があります。
http://www.php.net/manual/ja/language.variables.scope.php:PHP: 変数のスコープ - Manual]
globalが問題だったのですね。まだコードをしっかり見ないと理解できないところがありますので、じっくりと読んでみます。ありがとうございます。
失礼しました。
質問にもう一点、機能の追加がありましたね。
下記に変更例を掲載します。
ただし、drawCalender1 のみリンクの対応をしています。
drawCalender2 に関しては、同様にできると思いますので、そのままに保留してあります。
<?php //function drawCalender1 function drawCalender1( $y ,$m ) { // $dateinfo = getdate(); //YEARとMonthを受け取る $hi = date('j'); // $dateinfo['mday']; //get today's date $mm = date('n'); // $dateinfo['mon']; $yy = date('Y'); // $dateinfo['year']; $t = mktime(0, 0, 0, $m, 1, $y); //$y年$m月1日のUNIXTIME 日付情報の作成 $w = date( 'w', $t ); //1日の曜日(0:日~6:土)その月の曜日を求める $n = date( 't', $t ); //$y年$m月の日数 print "<TD colspan=7 align=center>"; print $y; print "年"; print $m; print "月"; print "</TD>"; print <<<DAY_TITLE <tr> <TD><FONT color="#ff0000">SUN</FONT></TD> <TD>MON</TD> <TD>TUE</TD> <TD>WED</TD> <TD>THU</TD> <TD>FRI</TD> <TD><FONT color="#0000ff">SAT</FONT></TD> </TR> DAY_TITLE; for( $i = 1 - $w ; $i <= $n + 7 ; $i++ ){ if ( ( ( $i + $w ) % 7 ) == 1 ) { print "<tr>\n"; } switch ( ( $i + $w ) % 7 ) { case 0 : $tdClass = '"saturday"'; break; case 1 : $tdClass = '"sunday"'; break; default : $tdClass = '"weekday"'; break; } if ( ( 0 < $i ) && ( $i <= $n ) ) { //1日から月の終わりまで if( mktime( 0, 0, 0, $m, $i, $y ) > mktime( 0,0,0, $mm, $hi, $yy ) ) { //リンク分岐 case0は土曜 print "<td class=$tdClass align=\"center\"><A href='form2-2.php?year=$y&month=$m&day=$i'>$i</A></td>\n"; }else { print "<td class=$tdClass align=\"center\">$i</A></td>\n"; } } else { print "<td class=$tdClass> </td>\n"; } if ((( $i + $w ) % 7 ) == 0 ) { print "</tr>\n"; if ( $i >= $n ) { break; } } } print "</table>\n"; } //function drawCalender2 function drawCalender2( $y ,$m ) { $t = mktime(0, 0, 0, $m, 1, $y); //$y年$m月1日のUNIXTIME 日付情報の作成 $w = date('w', $t); //1日の曜日(0:日~6:土)その月の曜日を求める $n = date('t', $t); //$y年$m月の日数 if($m==12){ $m=1; $y=$y+1; }else{ $m=$m+1; } print "<TD colspan=7 align=center>"; print $y; print "年"; print $m; print "月"; print "</TD>"; print <<<DAY_TITLE <tr> <TD><FONT color="#ff0000">SUN</FONT></TD> <td>MON</td> <td>TUE</td> <td>WED</td> <td>THU</td> <td>FRI</td> <TD><FONT color="#0000ff">SAT</FONT></TD> </tr> <tr> DAY_TITLE; for( $i = 1 - $w ; $i <= $n + 7 ; $i++ ){ if ( ( ( $i + $w ) % 7 ) == 1 ) { print "<tr>\n"; } if ( ( 0 < $i ) && ( $i <= $n ) ) { switch ( ( $i + $w ) % 7 ) { case 0: print "<td class=\"saturday\" align=\"center\"><A href='form2-2.php?year=$y&month=$m&day=$i'>$i</A></td>\n"; break; case 1: print "<td class=\"sunday\" align=\"center\"><A href='form2-2.php?year=$y&month=$m&day=$i'>$i</A></td>\n"; break; default : print "<td align=\"center\"><A href='form2-2.php?year=$y&month=$m&day=$i'>$i</A></td>\n"; break; } //switch end } else { print "<td> </td>\n"; } if ((( $i + $w ) % 7 ) == 0 ) { print "</tr>\n"; if ( $i >= $n ) { break; } } } print "</table>\n"; } ?> <?php // データの初期設定 $monthLast = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) ; // うるう年の計算 function uruu($year) { $ret = 28 ; if (($year % 4) == 0) $ret = 29 ; if (($year % 100) == 0) $ret = 28 ; if (($year % 400) == 0) $ret = 29 ; return $ret; if ($getResult==29 && $getMonth==2){ $monthLast[1]=29; } } ?> <HTML> <style type="text/css"> <!-- td.sunday { background-color:#ffcccc;} td.saturday { background-color:#ccffff;} td.weekday { background-color:#ffffff;} --> </style> <BODY> <TABLE border="1"> <TBODY> <?php //第一テーブル drawCalender1(date('Y'),date('n')); ?> </TBODY> </TABLE> <TABLE border="1"> <TBODY> <?php //第二テーブル drawCalender2(date('Y'),date('n')); ?> </TBODY> </TABLE> </BODY> </HTML>
一つ、アドバイスをさせていただくと、関数の外で設定した変数は、通常関数の中で参照できません。
参照したい場合は、関数の最初で
global $y;
のように記述が必要です。
他に問題があれば、回数コメントを有効にするか回答回数を増やしていただければ、補足説明いたします。
globalが問題だったのですね。まだコードをしっかり見ないと理解できないところがありますので、じっくりと読んでみます。ありがとうございます。
globalが問題だったのですね。まだコードをしっかり見ないと理解できないところがありますので、じっくりと読んでみます。ありがとうございます。