HPにカレンダーを設置したいのですが…。

このQ&Aのポイント
  • HP用に小さなカレンダーを設置したいと考え、フリーで使えるJavaスクリプトのカレンダーをダウンロードしたのですが、外部のファイルから読み込ませる方法はないでしょうか?
  • カレンダーの枠の色、文字色、背景色、土曜日の色、日曜日の色、本日の文字色、本日の背景色など、カレンダーのスタイルをカスタマイズしたいです。
  • また、過去から未来までの表示可能年数も設定したいです。具体的には、10年前から10年後まで表示できるようにしたいです。
回答を見る
  • ベストアンサー

HPにカレンダーを設置したいのですが…。

HP用に小さなカレンダーを設置したいと考え フリーで使えるJavaスクリプトのカレンダーをダウンロードしたのですが 下記のスクリプトファイルをhtmlに直接組み込まずに、 外部のファイルから読み込ませる方法はないでしょうか? 宜しくお願いします。 ------------------------------------------ <script> // カレンダーの枠の色 cal_bd = "#ffffff"; // カレンダーの文字色 cal_tx = "#636363"; // カレンダーの背景色 cal_bg = "#ffffff"; // 土曜日の色 sat_col = "#0000fd"; // 日曜日の色 sun_col = "#ff0100"; // 本日の文字色 tdy_tx = "#ffffff"; // 本日の背景色 tdy_col = "#ae2e23"; // 過去未来の表示可能年数(10なら10年前から10年後まで) noy = 10; // 月 mnname = new Array('1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'); // 曜日 wdname = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); buffer = document.location.search; buffer = buffer.replace("?",""); buffer = buffer.split("&"); query = new Array(); for (i in buffer) { buf = buffer[i].split("="); query[buf[0]] = buf[1]; } if (query['year'] && query['mon']) { y = eval(query['year']); m = eval(query['mon']) - 1; target = new Date(y,m); d = new Date(); nowyear = d.getYear(); nowmon = d.getMonth(); nowdate = d.getDate(); } else { target = new Date(); nowyear = target.getYear(); nowmon = target.getMonth(); nowdate = target.getDate(); } year = target.getYear(); mon = target.getMonth(); if (nowyear < 1900) nowyear += 1900; if (year < 1900) year += 1900; for (i = 28; i <= 31; i++) { ldate = new Date(year,mon,i); if (ldate.getMonth() == mon) ld = i; } fd = new Date(year,mon,1); fwday = fd.getDay(); ldate = new Date(year,mon,ld); lwday = ldate.getDay(); day = 1 - fwday; CAL = "<table><form><td align=center>"; CAL += "<table bgcolor=" + cal_bd + " border=0 cellpadding=0 cellspacing=0><td>"; CAL += "<table border=0 cellspacing=1>"; CAL += "<tr bgcolor=" + cal_bg + "><th colspan=7>"; CAL += "<select name=year class=mon>"; for (i = nowyear - noy; i <= nowyear + noy; i ++) if (i == year) CAL += "<option value=" + i + " selected>" + i; else CAL += "<option value=" + i + ">" + i; CAL += "</select><select name=mon class=mon>"; for (i = 1; i <= 12; i ++) if (i == mon + 1) CAL += "<option value=" + i + " selected>" + mnname[i-1]; else CAL += "<option value=" + i + ">" + mnname[i-1]; CAL += "</select> <input type=submit value='Set'>"; CAL += "</th></tr>"; CAL += "<tr bgcolor=" + cal_bg + ">"; for (i in wdname) { if (i == 0) wdname[i] = wdname[i].fontcolor(sun_col); else if (i == 6) wdname[i] = wdname[i].fontcolor(sat_col); else wdname[i] = wdname[i].fontcolor(cal_tx); CAL += "<td align=center class=wday><tt>" + wdname[i] + "</tt></td>"; } CAL += "</tr>"; while (day <= ld) { CAL += "<tr bgcolor=" + cal_bg + ">"; for (i = 0; i < 7; i ++) { if (day < 1 || day > ld) CAL += "<td><br></td>"; else { if (year == nowyear && mon == nowmon && day == nowdate) { CAL += "<td bgcolor=" + tdy_col + " align=right class=date>"; CAL += String(day).fontcolor(tdy_tx); } else { CAL += "<td align=right class=date>"; if (i == 0) CAL += String(day).fontcolor(sun_col); else if (i == 6) CAL += String(day).fontcolor(sat_col); else CAL += String(day).fontcolor(cal_tx); } CAL += "</td>"; } day ++; } CAL += "</tr>"; } CAL += "</table></td></table></td></form></table>"; document.write(CAL); </script>

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

フリーで使えるとはいえ、ソースをこのような場所で公開してよいというわけではありません。配布元の許可は得ているのでしょうか? 転載禁止等の注意があれば削除したほうがよいと思います。 一応回答です。 先頭の<script>を function DrawCalender() { に書き換え。 文末の</script>を } に書き換えてcalender.jsとして保存。 HTMLの<head>内に <script type="text/javascript" src="calender.js"></script> を設置 カレンダーをおきたいところに <script type="text/javascript"><!-- DrawCalender(); //--></script> を設置。 jsのファイル名はお好きなように変更してください。 HTML内に一切のスクリプトを置きたくなければ、ソース自体を書き換える必要があります。

関連するQ&A

  • カレンダーについて教えてください。

    phpでカレンダーを作っているのですが休日を設定したい場合 の方法がわかりません。 for文で日にちを表示させているのですが休日設定の配列の値を どのように参照すればいいかで悩んでおります。 // 現在の日付を取得 $year = date("Y"); $month = date("n"); $today = date("j"); // 休日を設定 $holyday = array('1', '5', '12', '28'); // カレンダー始まり echo "<table width='200' height='182' border='0'><tr><td valign='top'>"; echo "<table border ='0' bgcolor='#cccccc' cellspacing='1' cellpadding='3' width='170'><tr>\n"; echo "<td colspan='7' bgcolor='white' align='center' style='font-size:12px;font-weight:bold;color:#6666ff'>"; echo $year . "年" . $month . "月</td><tr>"; // 曜日表示部分 $weekday = array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'); for ($i = 0 ; $i < 7 ; $i++) { if ($i == 0 or $i == 6) { echo "<td class='head_" . $i . "'>"; } else { echo "<td class='head'>"; } echo $weekday[$i] . "</td>\n"; } echo "</tr>\n"; // 日数と曜日の計算 $days = cal_days_in_month (CAL_GREGORIAN, $month, $year); $week_start = jddayofweek (cal_to_jd(CAL_GREGORIAN, $month,1, $year) , 0); // 日付が始まる前の空白 for ($dot1 = 0 ; $dot1 < $week_start ; $dot1++) { echo "<td align='center' class='dot'></td>\n"; } // 日付表示部分 for ($day = 1 ; $day <= $days ; $day++) { if (($day+$week_start)%7 == 1) { // 日曜日 echo "<tr>\n<td class='sun'>$day</td>\n"; } else if (($day+$week_start)%7 == 0) { // 土曜日 echo "<td class='sat'>$day</td>\n</tr>\n"; } else if ($day == $today) { // 今日 echo "<td class = 'today'>$day</td>\n"; // ここで休日を表示させるのですが方法がわかりません。 } else if ($day == $holyday[0]) { // 休日 echo "<td class = 'holyday'>$day</td>\n"; } else { // 平日 echo "<td class='othr'>$day</td>\n"; } } // 最終日後の空欄の表示 $wend = 35 - ($days + $week_start); if ($wend < 0) { $wend += 7; } if ($wend == 7) { echo ''; } else if ($wend != 0) { for ($dot2 =0 ; $dot2 < $wend ;$dot2++) { echo "<td align='center' class='dot'></td>\n"; } } // カレンダー終り echo "</tr></table>\n"; echo "</td></tr></table>\n";

    • ベストアンサー
    • PHP
  • カレンダーの年月日の横に翌月へを追加したいです

    このカレンダーの年月日の横に翌月へを追加したいのですが やり方がわかりません。 翌月へをクリックすると翌月のカレンダーに変わるようにしたいです。 どなたかよろしくお願いします。 // 表示月数(x) x=1; // cldr = ""; day = new Date(); thisday = day.getDate(); day.setDate(1); month = day.getMonth() + 1; year = day.getYear(); if(year < 2000) year += 1900; numdays = new Array(31,28,31,30,31,30,31,31,30,31,30,31); if((year%4 == 0) && (year%100 != 0) || (year%400 == 0)) numdays[1] = 29; for(j = 0; j < x; j++){ date = new Date(); date.setDate(1) thisMonth = date.getMonth() + 1 + j; date.setMonth(thisMonth - 1); if(thisMonth > 12){ if(thisMonth % 12 == 1){ year++; } } thisMonth = date.getMonth() + 1; date.setDate(1); firstDay = date.getDay(); if(thisMonth == 1){holiday1 = 1; holiday2 = 14-(firstDay+5)%7; holiday3 = -1} else if(thisMonth == 2){holiday1 = 11; holiday2 = -1; holiday3 = -1} else if(thisMonth == 3){ ed = 20.8431 + 0.242194 * (year - 1980) - Math.floor((year - 1980)/4); holiday1 = Math.floor(ed); holiday2 = -1; holiday3 = -1; } else if(thisMonth == 4){holiday1 = -1; holiday2 = -1; holiday3 = -1} else if(thisMonth == 5){holiday1 = 3; holiday2 = 4; holiday3 = 5} else if(thisMonth == 6){holiday1 = -1; holiday2 = -1; holiday3 = -1} else if(thisMonth == 7){holiday1 = 21-(firstDay+5)%7; holiday2 = -1;holiday3 = -1} else if(thisMonth == 8){holiday1 = -1; holiday2 = -1; holiday3 = -1} else if(thisMonth == 9){ holiday1 = 21-(firstDay+5)%7; ed = 23.2488 + 0.242194 * (year - 1980) - Math.floor((year - 1980)/4); holiday2 = Math.floor(ed); holiday3 = -1 } else if(thisMonth == 10){holiday1 = 14-(firstDay+5)%7;; holiday2 = -1; holiday3 = -1} else if(thisMonth == 11){holiday1 = 3; holiday2 = 23; holiday3 = -1} else if(thisMonth == 12){holiday1 = 23; holiday2 = 30; holiday3 = -1} // 文字サイズ ymsize =16; dysize =16; // // 色 color0 = "aqua"; // 今日の背景 color2 = "red"; // 日曜,金曜,祝祭日 // cldr += "<table class='calender'>"; // カレンダーTable内の書式 cldr += "<tr class='calender'><th colspan=4><font color='#ffffff' style='font-size : "+ ymsize +"px;'>"+year+"年"+thisMonth+"月</font></th><th colspan=3>翌月へ</th></tr>"; // 年月セルの書式 cldr += "<tr class='calender2'><td>日</td><td>月</td><td>火</font></td><td>水</td><td>木</td><td>金</td><td>土</td></tr>"; for(sunday = 1-date.getDay(); sunday <= 36; sunday +=7){ cldr += "<tr align=center>"; for(i = sunday; i < sunday + 7; i++){ if((i > 0) && (i <= numdays[thisMonth-1])){ date.setDate(i); today = date.getDay(); if((thisday == i)&&(month == thisMonth)){ cldr += "<td bgcolor='"+ color0 +"'>" }else{ cldr += "<td>"; } if((today == 0)||(i == holiday1)||(i == holiday2)||(i == holiday3)||((today == 1)&&((i-1 == holiday1)||(i-1 == holiday2)||(i-1 == holiday3)))) { cldr += "<font color='"+ color2 +"'>"+ i +"</font>"; // 日曜,金曜の書式,祝祭日の書式 }else { cldr += i; // その他の日の書式 } cldr += "</td>"; }else{ cldr += "<td> </td>"; } } cldr += "</tr>"; } cldr += "</table>"; }document.write(cldr);

  • cgiとhtml

    #!/urs/bin/local/perl use CGI qw(:standard); use Date::Calc qw(:all); $year = param('year'); $mon = param('mon'); if ($year or $mon){ #年、月がないとエラー if (!$year){ &error(100,'年、月を入力して下さい。'); }elsif(!$mon){ &error(110,'年、月を入力して下さい。'); } #年は1以上、月は、1~12の範囲 #紀元前は計算しない if($year < 1){ &error(120,'年に誤りがあります。'); } if($mon < 1 or $mon > 12){ &error(130,'月に誤りがあります。'); } #カレンダーの計算 $cline = Calendar($year,$mon); #先頭行と最終行をとる $cline =~ s/^\n//; $cline =~ s/\n$//; #改行区切りで分割 @Cal = split(/\n/,$cline); #まず、年、月をテーブルに入れる $CAL.=<<"EOL"; <table border="1"> <tr> <td colspan="7" align="center">$year年$mon月</td> </tr> EOL #曜日をテーブルに入れる $CAL.=<<"EOL"; <tr> <td>日</td> <td>月</td> <td>火</td> <td>水</td> <td>木</td> <td>金</td> <td>土</td> </tr> EOL #日付をテーブルに入れる for($i=2; $i<=$#Cal; $i++){ $CAL.= <<"EOL"; <tr> EOL $shift=3; #1日に3文字文使う $s = 0; for ($j=0; $j<7; $j++){ $day = substr($Cal[$i], $s, $shift); if($day !~ /\d/){ $day = '&nbsp;'; #数字がなければスペース }else{ $day =~ s/ //g; #余分なスペースをとる } $CAL.=<<"EOL"; <td align="right">$day</td> EOL $s += $shift #3文字を右へ $s += 1; #2回目からは、区切り文字も計算 } $CAL.=<<"EOL"; </tr> EOL } $CAL.=<<"EOL"; </table> EOL } print <<"EOL"; Content-type: txet/html というプログラムを作ってカレンダーを表示させたいのですが、 HTMLで打つときに <html> <head> <title>カレンダー</title> </head> <body> <from action="report.cgi"> 年:<input type="text" size="4" name="year"> 月:<input type="text" size="2" name="mon"> <br> <input type="submit" value="表示"> </from> <br><br> $CAL(と入れたのですが、画面に%CALと出るだけでカレンダーが表示されません) </body> </html> 何を入れると画面ににきれいにカレンダーが表示されるのでしょうか?

    • ベストアンサー
    • CGI
  • html

    #!/urs/bin/local/perl use CGI qw(:standard); use Date::Calc qw(:all); $year = param('year'); $mon = param('mon'); if ($year or $mon){ #年、月がないとエラー if (!$year){ &error(100,'年、月を入力して下さい。'); }elsif(!$mon){ &error(110,'年、月を入力して下さい。'); } #年は1以上、月は、1~12の範囲 #紀元前は計算しない if($year < 1){ &error(120,'年に誤りがあります。'); } if($mon < 1 or $mon > 12){ &error(130,'月に誤りがあります。'); } #カレンダーの計算 $cline = Calendar($year,$mon); #先頭行と最終行をとる $cline =~ s/^\n//; $cline =~ s/\n$//; #改行区切りで分割 @Cal = split(/\n/,$cline); #まず、年、月をテーブルに入れる $CAL.=<<"EOL"; <table border="1"> <tr> <td colspan="7" align="center">$year年$mon月</td> </tr> EOL #曜日をテーブルに入れる $CAL.=<<"EOL"; <tr> <td>日</td> <td>月</td> <td>火</td> <td>水</td> <td>木</td> <td>金</td> <td>土</td> </tr> EOL #日付をテーブルに入れる for($i=2; $i<=$#Cal; $i++){ $CAL.= <<"EOL"; <tr> EOL $shift=3; #1日に3文字文使う $s = 0; for ($j=0; $j<7; $j++){ $day = substr($Cal[$i], $s, $shift); if($day !~ /\d/){ $day = '&nbsp;'; #数字がなければスペース }else{ $day =~ s/ //g; #余分なスペースをとる } $CAL.=<<"EOL"; <td align="right">$day</td> EOL $s += $shift #3文字を右へ $s += 1; #2回目からは、区切り文字も計算 } $CAL.=<<"EOL"; </tr> EOL } $CAL.=<<"EOL"; </table> EOL } print <<"EOL"; Content-type: txet/html というプログラムを作ってカレンダーを表示させたいのですが、 HTMLで打つときに <html> <head> <title>カレンダー</title> </head> <body> <from action="report.cgi"> 年:<input type="text" size="4" name="year"> 月:<input type="text" size="2" name="mon"> <br> <input type="submit" value="表示"> </from> <br><br> ここに入れるべきものがよくわかりません。 </body> </html> 何を入れるとプログラムにきれいにカレンダーが表示されるのでしょうか?

    • ベストアンサー
    • HTML
  • 万年カレンダーについて

    万年カレンダーについて質問します。例えば、11月10日(月)が休みとした場合に11月10日(月)セルの背景を赤色にする方法を教えて下さい。下記のプログラムに加える記述方法を教えて下さい。 <?php if($_GET['num']==''){ $today_year =date("Y"); $today_month=date("n"); }else{ $timestamp=mktime(0,0,0,date("n")+$_GET['num'],date("d"),date("Y")); $today_year =date("Y",$timestamp); $today_month=date("n",$timestamp); } $current=mktime(0,0,0,$today_month,1,$today_year); $first_day=date("w",$current); $last_day=date("t",$current); ?> <html> <head> <title>万年カレンダ</title> </head> <body> <h1 style="background:#cccccc"> <?php print(date("Y年m月",$current)); ?>のカレンダ</h1> <table border="1" width="300"> <tr> <th>日</th><th>月</th><th>火</th><th>水</th> <th>木</th><th>金</th><th>土</th> </tr> <?php for($i=1;$i<=$first_day+$last_day;$i++){ if($i%7==1){print("<tr>"); } if($i>$first_day){ print("<td>".($i-$first_day)."</td>"); }else{ print("<td>&nbsp;</td>"); } if($i%7==0){print("</tr>");} } ?> </table> </body> </html>

    • ベストアンサー
    • PHP
  • カレンダー作成

    普通のカレンダーみたいなものを作成したいのですが、例えば今月の頭って月曜日ですよね? それの前の日曜日の枠を作成したいのですが方法がわかりません。 どのようにすればいいのでしょうか? for($i=0;$i<$last;$i++){#●テーブル作成 @weekarray = ('日','月','火','水','木','金','土'); $first = $year.$mon.$day-($day-1); $calender = $first+$i; $youbi_master = getwday($calender_year,$calender_mon,1,1); $calender_year = substr($calender,0,4); $calender_mon = substr($calender,4,2); $calender_day = substr($calender,6,2); $calender_search = $calender_year."/".$calender_mon."/".$calender_day; $calender_youbi = getwday($calender_year,$calender_mon,$calender_day); open(FILE,"log.log"); @log = <FILE>; close(FILE); $gyou = @log; $w = 0; while($w<$gyou){ @log_line = split(/<>/,$log[$w]); $HIDUKE = $log_line[0]; $TITLE = $log_line[1]; $NAKAMI = $log_line[2]; if($calender_youbi == 0){#----------<日曜日だったら if($w == $gyou-1){ print "<TR><TD WIDTH=100 CLASS=TD1>$calender_search <B>$flag_sun $flag</B></TD>\n"; $flag_sun = $flag_sun+1; $flag = $flag +1; } } elsif($calender_youbi == 6){#----------<土曜だったら if($w == $gyou-1){ print "<TD WIDTH=100 CLASS=TD1>$calender_search</TD></TR>\n"; } } else {#----------<その他の曜日 if($w == $gyou-1){ print "<TD WIDTH=100 CLASS=TD1>$calender_search</TD>\n"; } }#曜日による分岐終了 $w++; }# while }# ●テーブル作成for終了

  • PHPでカレンダー

    PHPを使ってカレンダーを作成しました。が、コードの意味が良く分かりません。 コードは以下の通りです。 <?php if($_GET['num']==''){ $today_year = date("Y"); //4桁の西暦年 $today_month = date("n"); //1~12の月 }else{ $timestamp = mktime(0,0,0,date("n")+$_GET['num'],date("d"),date("Y")); $today_year = date("Y",$timestamp); $today_month = date("n",$timestamp); //1~12月 } $current = mktime(0,0,0,$today_month,1,$today_year); $first_day = date("w",$current); //1日の曜日を0~6に当てはめる $last_day= date("t",$current); //月の日数 ?> <html> <head> <title>カンレンダー</title> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> </head> <body> <h1><?php print (date("Y年m月",$current)); ?>のカレンダー</h1> <table border="1" cellpadding="0" cellspacing="2"> <tr> <th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th> </tr> <?php for($i=1; $i<=$first_day+$last_day; $i++){ if($i%7==1){print ("<tr>");} if($i>$first_day){ print ("<td>".($i-$first_day)."</td>"); }else{ print ("<td>&nbsp;</td>"); } if($i%7==0){print ("</tr>");} } ?> </table> </body> </html> for以降の部分が良く分かりません。よろしくお願いします。※上記のスクリプトで正しく表示されることは確認済です。

    • 締切済み
    • PHP
  • 配列が受け取れないのはなぜなのでしょうか?

    カレンダーの日付にリンクをさせようとしているのですが、上手くできません。 リンクさせたい日付をforeachで配列として渡そうと思うのですが、 受け取ってくれません。 なぜ、受け取ることができないのでしょうか? 何が間違っているのでしょうか。 どなたかご指摘、アドバイスなどお願いします。 以下コードです。 <?php $qry = $_SERVER['QUERY_STRING']; if( ereg( "^[0-9]{8}", $qry ) ){ $today = getdate( mktime( 0, 0, 0, substr( $qry,4,2 ), substr( $qry,6,2 ), substr( $qry,0,4 ) ) ); }else{ $today = getdate(); } $f_today = getdate( mktime( 0, 0, 0, $today[mon], 1, $today[year] ) ); $prev_month = date( "Ymd", mktime( 0, 0, 0, $today[mon], 0, $today[year] ) ); $next_month = date( "Ymd", mktime( 0, 0, 0, $today[mon]+1, 1, $today[year] ) ); <table width=170><tr><td> <table width=100%> <tr><td colspan=7><a href="?<?= $prev_month ?>">≪ </a><?= $today[year] ?>年<?= $today[mon] ?>月 <a href="?<?= $next_month ?>"> ≫</a></td></tr> <tr><td>日</td><td>月</td><td>火</td><td>水</td><td>木</td><td>金</td><td>土</td></tr> <tr> <?php for ( $i=0; $i<$f_today[wday]; $i++ ) { echo "<td></td>\n"; } $day = 1; while( checkdate( $today[mon], $day, $today[year] ) ){ $link = sprintf( "%4d%02d%02d", $today[year], $today[mon], $day ); if( $link == 20081014 ){ //← 日付を指定※ここが問題の箇所です。 echo "<td><a href=?date=$link\">$day</a></td>\n"; }else{ echo "<td>$day</td>\n"; } if( $f_today[wday] == 6) echo "</tr><tr>"; $day++; $f_today[wday]++; $f_today[wday] = $f_today[wday] % 7; } if( $f_today[wday] > 0 ){ while( $f_today[wday] < 7 ) { echo "<td> </td>\n"; $f_today[wday]++; } } else { echo "<td colspan=7></td>\n"; } ?> </tr> </table> </td></tr></table> 下記のように日付を配列にするとダメです。 $day = 1; //以下を変更 $data = array( "200810005", "200810010", "20081011", "20081015", "20081025", "20081030" ); foreach( $data as $value ) { $val = $value; while( checkdate( $today[mon], $day, $today[year] ) ){ $link = sprintf( "%4d%02d%02d", $today[year], $today[mon], $day ); if( $link == $val ){  // ← 配列で代入※配列として受け取ってくれない。 echo "<td><a href=?date=$link\">$day</a></td>\n"; }else{ echo "<td>$day</td>\n"; } if( $f_today[wday] == 6) echo "</tr><tr>"; $day++; $f_today[wday]++; $f_today[wday] = $f_today[wday] % 7; } } ↑ここまで なぜ、できないのかが分からないので、色々試しても上手くいきません。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHPによるカレンダーについて

    PHPでカレンダーを作成しています。 プルダウンで年月を指定し、更新ボタンを押せば、指定した年月のカレンダーを表示させたいのですが、うまくいきません。 更新ボタンを押してもカレンダーが変わらないです。 KOMOカレンダーというサイトを参考にして、文字コードを変えただけです。 教えてくださる方がいらっしゃいましたら宜しくお願いいたします。 <?php $last_year = 2037; $wday_color = "#000000"; $sat_color = "#0000ff"; $sun_color = "#ff0000"; $reg_color = "#ffccff"; $year = (!isset($year)) ? date("Y") : $year; $month = (!isset($month)) ? date("n") : $month; ?> <HTML> <HEAD> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <TITLE>カレンダー</TITLE> </HEAD> <BODY> <P><FONT SIZE="6" COLOR="#006600">カレンダー</FONT></P> <P> <TABLE BORDER="1"CELLSPACING="1" CELLPADDING="1"> <TR> <TD COLSPAN="7"> <SELECT NAME="year"> <?php for($i = 2002; $i <= $last_year; $i++){ echo "<option value=".$i.(($i == $year) ? ' selected':'').">".$i."年\n"; } ?> </SELECT> <SELECT NAME="month"> <?php for($i = 1; $i <= 12; $i++){ echo "<option value=" . $i . (($i == $month) ? ' selected':'').">".$i."月\n"; } ?> </SELECT> <INPUT TYPE="SUBMIT" NAME="Submit" VALUE="更新"></TD> </TR> <TR> <TD> <P ALIGN="CENTER"><FONT COLOR="red">日</FONT> </TD> <TD> <P ALIGN="CENTER">月 </TD> <TD> <P ALIGN="CENTER">火 </TD> <TD> <P ALIGN="CENTER">水 </TD> <TD> <P ALIGN="CENTER">木 </TD> <TD> <P ALIGN="CENTER">金 </TD> <TD> <P ALIGN="CENTER"><FONT COLOR="blue">土</FONT> </TD> </TR> <?php $time = mktime(0, 0, 0, $month, 1, $year); $day_of_first = date("w", $time); $date_of_month = date("t", $time); $week_of_month = ceil($date_of_month / 7); if(($date_of_month % 7 > 7 - $day_of_first) || ($date_of_month % 7 == 0 && $day_of_first != 0)){ $week_of_month++; } for($i = 1; $i <= $week_of_month * 7; $i++){ if($i % 7 == 1){ echo "<tr>"; } if(($i - 1 < $day_of_first) || ($i > $date_of_month + $day_of_first)){ echo "<td>&nbsp;</td>"; }else{ if($i % 7 == 1){ $color = $sun_color; }elseif($i % 7 == 0){ $color = $sat_color; }else{ $color = $wday_color; } echo "<td width=30 height=30 align=right valign=top>"; echo "<font color=" . $color . ">"; echo $i - $day_of_first; echo "</font></td>"; } if($i % 7 == 0){ echo "</tr>\n"; } } ?> </TABLE> </FORM> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • javaのカレンダー作成について

    コマンドライン引数で渡された6桁の数字をカレンダーに起こすプログラムを作成しています。 以下のように書きました。 ↓ public class Calendar { public static void main(String[] args) { java.util.Calendar cal = java.util.Calendar.getInstance(); int year = Integer.parseInt(args[0].substring(0, 4)); int month = Integer.parseInt(args[0].substring(4)); cal.set(java.util.Calendar.YEAR, year); cal.set(java.util.Calendar.MONTH, month - 1); cal.set(java.util.Calendar.DAY_OF_MONTH, 1); int week = cal.get(java.util.Calendar.DAY_OF_WEEK); //日曜始まり一週間のセット作成 int weekset = 0; if (week == cal.SUNDAY) { weekset = 0; } else if (week == cal.MONDAY) { weekset = 1; } else if (week == cal.TUESDAY) { weekset = 2; } else if (week == cal.WEDNESDAY) { weekset = 3; } else if (week == cal.THURSDAY) { weekset = 4; } else if (week == cal.FRIDAY) { weekset = 5; } else if (week == cal.SATURDAY) { weekset = 6; } //月末日 int lastDay = cal.getActualMaximum(java.util.Calendar.DAY_OF_MONTH); //7日ごとに改行するカウンタ用意 int counter = 0; System.out.println( year + "年" + month + "月"); System.out.println(" 日 月 火 水 木 金 土"); //weekset分回す for (int i = 0; i < weekset; i++) { System.out.print(" "); counter ++; } //1日から月末日まで、カレンダーを表示する for (int day = 1 ; day <= lastDay; day ++) { if (day < 10) { System.out.print(" " + day + " "); } else { System.out.print( day + " "); } counter ++; if (counter == 7) { // 7日おきに改行する counter = 0; System.out.println(); } } } } きちんと動作してくれるのですが、2つ目のループ内の、 ************** for (int day = 1 ; day <= lastDay; day ++) { if (day < 10) { ●System.out.print(" " + day + " "); } else { ●System.out.print( day + " "); } ************** ●の部分の出力はループの外で一つに纏められるはずだと指摘されました。 dayの後ろの部分にだけなら、for文の前にString str = "";と宣言しておいて、 for (int day = 1 ; day <= lastDay; day ++) { str += " "; とすることで空白を付けられる気がしているのですが、前部分に空白を設定した上でまとめて出力する方法が分かりません。 お分かりになる方、どのようにすればよいのかご教授お願いいたします。 (また、上記の方法自体全く的外れということでしたらそれを含めてご教授お願いいたします・・・;;)

    • ベストアンサー
    • Java