あいねこの館         管理者にコメントを送る

■本サイトは?

当ホームページでは、日々の日記を中心に、プログラムの説明(PHPとJava)、ドコモの携帯の情報を取り扱っています。
またゲームサーバの設置、PHPで作ったゲーム、アプリケーションを設置、配布しております。
初心者の皆さんも上級者の皆さんもぜひ満足頂けるそんなサイトを目指したいと日々奮闘中です。


【▼中心記事】旅行記/ ▽激安商品特集/ ▽FXレポート/ ▽PHPアプリの配布・説明/ ▽Javaの説明限定版・初回版・お買得情報
【▼WEBアプリ】簡単WEB家計簿/ ▽プロフェッショナルWEB家計簿/
【▼Webゲーム】商人物語/ ▽商人物語(WorldAtlas)/ ▽枝モン(RO)/ ▽ROモンスターバトル/ ▽アイテムトレード(RO)/ ▽HPバトラー/ ▽ブラックジャック/ ▽マジカルバナナ
▼スポンサードリンク

■カレンダー

前月 2010年03月 翌月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

■CONTETS

【サイトについて】
Top
Profile

【アプリケーション】
簡単WEB家計簿
プロフェッショナルWEB家計簿

【独立サイト】
これって私だけ!?
ゲームの殿堂

【コラム】
カフェで勉強!
資格を取ろう!

【Webゲーム】
貴方の頭を活性化させよう!
商人物語
商人物語(WorldAtlas)
枝モン(RO)
ROモンスターバトル
アイテムトレード(RO)
HPバトラー
ブラックジャック
マジカルバナナ

【旅行】
Travel
Picture

【プログラム】
■PHP
 ▽PHP
 ▽PHP独自関数
 ▽PHPを始めて学ぼう!
  ※yahooカテゴリ掲載サイト
C++
java
C++builder

【お得な買い物】
激安商品特集
限定版・初回版・お買得情報

【趣味の世界・・・】
K10D MANIAX

【データベース】
DSのソフト一覧
wiiのソフト一覧

【ログ】
Diary
News
Topic

【その他】
サイトマップ
mail(MSN)

■携帯版

お手持ちの携帯電話からQRコードを読み取ることが出来ます。
アドレス:http://aineko.com/mobile/

【管理者用】
サイト更新

■アップデート履歴

[diary] meet the world beat 2008(2008/07/28)
[diary] 簿記1級講座(2008/07/15)
[diary] 解等結果(2008/07/06)
[diary] ビジネス法務検定(2008/07/06)
[diary] アンケート例(2008/07/05)
[diary] ビジネス法務検定(2008/07/05)
[diary] HDDレコーダー(RD-E301)(2008/06/30)
[diary] プロフェッショナルWEB家計簿のメンテ(2008/06/29)
[diary] 試験の結果(2008/06/22)
[diary] 住民税(2008/06/17)

■ご意見・ご要望

管理者にコメントを送る

■アクセス数

update 2008/07/28   ALL165767 TODAY153 YESTADAY154


LINK

●検索サイト
Google
Yahoo!Japan
goo
●相互リンク
ぽたっこゆな
ResTel
●一般ニュース
Googleニュース
読売新聞
●PCニュース
PC Watch
ITmedia
●ゲームニュース
4gamer
ITmedia Games
ファミ通
●通信販売
amazon
●価格情報
価格.com
●個人ニュースサイト
TS
連邦
●読み物
探偵ファイル
●面白
負け猫たちの呟き
爆笑画像掲示板
pya!
リアルイラスト専用掲示板
●映画情報
映画生活
●音楽情報
オリコン
●電車時刻表
JRおでかけネット(JR西)
阪急電鉄
●辞書
goo辞書
アルク
●百科事典
ウィキペディア
●グルメ
グルナビ
●就職活動
みんなの就職活動日記
●リンクサイト
どんとこいサーチ
PHPカレンダー

▼スポンサードリンク

PHPでカレンダーを作るスクリプトを紹介します。カレンダーの使用用途として、日記や家計簿などで、日付を簡単に選ぶことができますね。
◆カレンダースクリプト
先ず、カレンダーのプログラムを以下に示します。
▼ダウンロード(右クリック⇒対象をファイルに保存し、txtをphpに名前変換する)
▼動作を試す

<?
//本日の日付を取得する
$time = time();

//各日付をセットする
$year = date("Y", $time);
$month = date("n", $time);
$day = date("j", $time);

//GETにきた年月をチェックする
$year2=@$_GET["year"];
$month2=@$_GET["month"];
$day2=@$_GET["day"];

//先月、来月をクリックした場合の処理
if($year2!="" || $month2!="" || $day2!=""){
	if($year2!=""){
		$year = $year2;
	}
	if($month2!=""){
		$month = $month2;
	}
	if($day2!=""){
		$day = $day2;
	}
	else{
		$day = 1;
	}
	$time = mktime(0,0,0,$month,$day,$year);
}

//今月の日付の数
$num = date("t", $time);

//曜日を取得するために時間をセット
$today = mktime(0,0,0,$month,$day,$year);

//曜日の配列
$date = array('日','月','火','水','木','金','土');

//カレンダーを表示する
//先月の場合
if($month==1){
	$year3 = $year-1;
	$month3 = 12;
}
else{
	$year3 = $year;
	$month3 = $month-1;
}

//来月の場合
if($month==12){
	$year4 = $year+1;
	$month4 = 1;
}
else{
	$year4 = $year;
	$month4 = $month+1;
}

//カレンダーを表示するHTML
print "<table width=150><tr><td colspan=7>";
print "<center>
<a href=\"?year=$year3&month=$month3\">".$month3."月</a>";
print " ".$year."年".$month."月 ";
print "<a href=\"?year=$year4&month=$month4\">".$month4."月</a>
</td></tr>
";

print "
<tr> 
<td><font color=red>日</font></td>
<td>月</td>
<td>火</td>
<td>水</td>
<td>木</td>
<td>金</td>
<td><font color=blue>土</font></td>
</tr>
";

//カレンダーの日付を作る
for($i=1;$i<=$num;$i++){

	//本日の曜日を取得する
	$print_today = mktime(0, 0, 0, $month, $i, $year);
	//曜日は数値
	$w = date("w", $print_today);

	//一日目の曜日を取得する
	if($i==1){
		//一日目の曜日を提示するまでを繰り返し
		print "<tr>";
		for($j=1;$j<=$w;$j++){
			print "<td></td>";
		}
		$data = check($i,$w,$year,$month,$day);
		print "<td>$data</td>";
		if($w==6){
			print "</tr>";
		}
	}
	//一日目以降の場合
	else{
		if($w==0){
			print "<tr>";
		}
		$data = check($i,$w,$year,$month,$day);
		print "<td>$data</td>";
		if($w==6){
			print "</tr>";
		}
	}

}
print "</table>";

//特定の日付の場合の処理
function check($i,$w,$year,$month,$day){

	if($w==0){
		$change = "<font color=red><a href=\"?year=$year
&month=$month&day=$i&write=on\" color=red>$i</a></font>";
	}
	elseif($w==6){
		$change = "<font color=blue><a href=\"?year=$year
&month=$month&day=$i&write=on\">$i</a></font>";
	}
	else{
		$change = "<a href=\"?year=$year&month=$month&day=$i
&write=on\">$i</a>";
	}

	return $change;

}
?>



◆カレンダー作成の考え方
PHPでカレンダースクリプトを考える際の考え方を大まかに紹介します。

1.今月を把握する。
2.曜日と日付を照らし合わせる。
3.翌月と来月の処理を考える。

今後は上記のサンプルプログラムを元にして、紹介していきます。
▼スポンサードリンク

1.本日の情報を取得する
//本日の日付を取得する
$time = time();

//各日付をセットする
$year = date("Y", $time);
$month = date("n", $time);
$day = date("j", $time);
time()から本日の情報を取得し、本日の年月日を取得します。


2.別の月を表示したい場合
//GETにきた年月をチェックする
$year2=@$_GET["year"];
$month2=@$_GET["month"];
$day2=@$_GET["day"];

//先月、来月をクリックした場合の処理
if($year2!="" || $month2!="" || $day2!=""){
	if($year2!=""){
		$year = $year2;
	}
	if($month2!=""){
		$month = $month2;
	}
	if($day2!=""){
		$day = $day2;
	}
	else{
		$day = 1;
	}
	$time = mktime(0,0,0,$month,$day,$year);
}
ここでは、カレンダーの先月、来月をクリックして、その月のカレンダーを表示するための処理になります。本日の年月日に上書きされます。一時的に日は1日になるように設定しています。


3.今月の日付の数を知る
//今月の日付の数
$num = date("t", $time);
カレンダーを表示する時には、日付の数が必要です。自動的にdateでは、うるう年も計算してくれるため、かなり便利ですね。

おまけとして、うるう年の計算として・・・
1.西暦が4で割り切れるとうるう年とする。
2.西暦が100で割り切れるとうるう年ではない。
3.更に西暦が400で割り切れると、うるう年にする。
これをプログラム化するだけですが、特にしなくても問題は発生しません。


4.日付と曜日を対応させる
//曜日の配列
$date = array('日','月','火','水','木','金','土');
上記の配列に対応する表として、その先にあるプログラムの中に、下記のプログラムがあります。
//本日の曜日を取得する
$print_today = mktime(0, 0, 0, $month, $i, $year);
//曜日は数値
$w = date("w", $print_today);
dateから、曜日を曜日に対応する表示に設定してくれます。例えば、1日が日曜なら0、3日が火曜なら2が$wに格納されます。その数字の結果を配列に照らし合わせて、$dateに曜日を対応させます。


5.先月と来月にも適用させる
//カレンダーを表示する
//先月の場合
if($month==1){
	$year3 = $year-1;
	$month3 = 12;
}
else{
	$year3 = $year;
	$month3 = $month-1;
}

//来月の場合
if($month==12){
	$year4 = $year+1;
	$month4 = 1;
}
else{
	$year4 = $year;
	$month4 = $month+1;
}
カレンダーを今月だけではなくて、先月以降も来月以降も対処できるように設定します。今月を基準として来月・先月に対応するため、永遠にカレンダーを作成することができます。先月が1月になると、その先月は12月になり去年となりますし、来月が12月になると、その来月は1月になりますし、来年となりますので、その処理は必要となります。


6.カレンダーの外枠を作成する
//カレンダーを表示するHTML
print "<table width=150><tr><td colspan=7>";
print "<center>
<a href=\"?year=$year3&month=$month3\">".$month3."月</a>";
print " ".$year."年".$month."月 ";
print "<a href=\"?year=$year4&month=$month4\">".$month4."月</a>
</td></tr>
";
カレンダーの外枠と、先月と今月と来月を表示するHTMLです。tableのサイズや背景などは別途変更してください。「先月」は「<<」、「今月」は「>>」に変更しても良いかと思います。

print "
<tr> 
<td><font color=red>日</font></td>
<td>月</td>
<td>火</td>
<td>水</td>
<td>木</td>
<td>金</td>
<td><font color=blue>土</font></td>
</tr>
";
各曜日を設定します。土曜日の文字は水色に、日曜日の背景は赤色にしていますが、背景も土曜日は水色系、日曜日は赤色系に設定しても良いかと思います。


7.各日付に曜日を対応させる
//カレンダーの日付を作る
for($i=1;$i<=$num;$i++){
今月の曜日は1日目から、今月の日数分のnum日目まで繰り返して表示させる。

//本日の曜日を取得する
$print_today = mktime(0, 0, 0, $month, $i, $year);
//曜日は数値
$w = date("w", $print_today);
カレンダーの表示は、一日目の曜日を基準にして、そこから順番に曜日を表示させていく。

//一日目の曜日を取得する
if($i==1){
	//一日目の曜日を提示するまでを繰り返し
	print "<tr>";
	for($j=1;$j<=$w;$j++){
		print "<td></td>";
	}
	$data = check($i,$w,$year,$month,$day);
	print "<td>$data</td>";
	if($w==6){
		print "</tr>";
	}
}
一日目の場合は、概要の曜日まで(日曜から土曜へ走査する)は、空白をいれ、一日目が該当する曜日と一致した場合に、その曜日に一日目を表示させる。

//一日目以降の場合
else{
	if($w==0){
		print "<tr>";
	}
	$data = check($i,$w,$year,$month,$day);
	print "<td>$data</td>";
	if($w==6){
		print "</tr>";
	}
}
一日目以降の場合は、日曜の日付の場合は、先頭になるために、タグtdを開始し、土曜の日付の場合はタグtdを閉じます。これによって、一週間単位でカレンダーを表示することができます。タグtdにクラスなどを用いて、背景色などを整えて下さい。

関数checkは、その曜日のリンク先を作成する関数です。この作成された曜日のリンクをクリックすることにより、その曜日の詳細のHTMLを閲覧することができます(もちろんそのスクリプトは自分で書かないといけませんが・・・)。


8.日付のリンクを作成する
//特定の日付の場合の処理
function check($i,$w,$year,$month,$day){

	if($w==0){
		$change = "<font color=red><a href=\"?year=$year
&month=$month&day=$i&write=on\" color=red>$i</a></font>";
	}
	elseif($w==6){
		$change = "<font color=blue><a href=\"?year=$year
&month=$month&day=$i&write=on\">$i</a></font>";
	}
	else{
		$change = "<a href=\"?year=$year&month=$month&day=$i
&write=on\">$i</a>";
	}

	return $change;

}
特定の曜日の日付の場合の処理を行います。例えば、土曜日なら青色、日曜日なら赤色などです。日付をクリックすると、URLの?以降にその曜日を特徴付ける項目がつきますので、それでその曜日の情報を出すことができます。


まとめ
カレンダースクリプトの実行結果です。


以上でカレンダースクリプトが完成しました。
装飾などは上記のスクリプトに書いておりませんので、
最後に、タグtableにおいて、装飾を加えると良いでしょう。

TOPへ
amazonから個人的にお勧めする商品を紹介します。
私が購入した商品


サーチ:
キーワード:
Amazon.co.jpアソシエイト