calen.php
63PearVillageに戻る
<?php
session_start();
/*
$_GET["def"]の値を記憶しておくために
$_SESSIONが必要
必要パッケージの読み込み
*/
require_once('Calendar/Day.php');
require_once
('Calendar/Month/Weekdays.php');
/*
C:\xampp\php\pear\Calendar
C:\xampp\php\\pear\Calendar\Month
の中にあり
ここからカレンダ前処理
*/
if (isset($_GET["def"])) {
$_SESSION["def"] = $_GET["def"];
} // 来月指定の時 def=1
if (isset($_SESSION["def"])) {
// 前回指定の読取り
$def = $_SESSION["def"];
} else {
$def = 0;
}//スタ-トはここにくる
// インスタンスの作成
$Calendar =
new Calendar_Month_Weekdays
(date('Y', strtotime(date("Y-m-01")
. $def.' month')),
date('n', strtotime(date("Y-m-01")
. $def.' month')), 0);
/*
〇or一or二ヶ月後の年月指定
最後の 0 で日曜日スタ-トを指定
マークしたい日付の作成
*/
$Today = new Calendar_Day
(date('Y'),date('n'),date('j'));
/*
$y 年。例: 2014
$m 月。例: 8
$d 日。例: 15
今日現在の年月日をセット
特定の日をここでインスタンスする。
あとで isSelectedメソッドで差別化する
*/
$selection = array($Today);
// カレンダインスタンスを初期化
$Calendar->build($selection);
/*
buildメソッド
build($selection)とするため
array $selection を作成。
祝日の設定
*/
$holidays[20150101] = "元日";
$holidays[20150112] = "成人の日";
$holidays[20150211] = "建国記念の日";
$holidays[20150321] = "春分の日";
$holidays[20150429] = "昭和の日";
$holidays[20150503] = "憲法記念日";
$holidays[20150504] = "みどりの日";
$holidays[20150505] = "こどもの日";
$holidays[20150506] = "振替休日";
$holidays[20150720] = "海の日";
$holidays[20150921] = "敬老の日";
$holidays[20150922] = "国民の休日";
$holidays[20150923] = "秋分の日";
$holidays[20151012] = "体育の日";
$holidays[20151103] = "文化の日";
$holidays[20151123] = "勤労感謝の日";
$holidays[20151223] = "天皇誕生日";
$holidays[20160101] = "元日";
$holidays[20160111] = "成人の日";
$holidays[20160211] = "建国記念の日";
$holidays[20160320] = "春分の日";
$holidays[20160321] = "振替休日";
$holidays[20160429] = "昭和の日";
$holidays[20160503] = "憲法記念日";
$holidays[20160504] = "みどりの日";
$holidays[20160505] = "こどもの日";
$holidays[20160718] = "海の日";
$holidays[20160811] = "山の日"; //追加
$holidays[20160919] = "敬老の日";
$holidays[20160922] = "秋分の日";
$holidays[20161010] = "体育の日";
$holidays[20161103] = "文化の日";
$holidays[20161123] = "勤労感謝の日";
$holidays[20161223] = "天皇誕生日";
//20160201 春分 秋分の日 正式決定により追加
$holidays[20170101] = "元日";
$holidays[20170102] = "振替休日";
$holidays[20170109] = "成人の日";
$holidays[20170211] = "建国記念の日";
$holidays[20170320] = "春分の日";
$holidays[20170429] = "昭和の日";
$holidays[20170503] = "憲法記念日";
$holidays[20170504] = "みどりの日";
$holidays[20170505] = "こどもの日";
$holidays[20170717] = "海の日";
$holidays[20170811] = "山の日";
$holidays[20170918] = "敬老の日";
$holidays[20170923] = "秋分の日";
$holidays[20171009] = "体育の日";
$holidays[20171103] = "文化の日";
$holidays[20171123] = "勤労感謝の日";
$holidays[20171223] = "天皇誕生日";
//20170201 春分 秋分の日 正式決定により追加
$holidays[20180101] = "元日";
$holidays[20180108] = "成人の日";
$holidays[20180211] = "建国記念の日";
$holidays[20180212] = "振替休日";
$holidays[20180321] = "春分の日";
$holidays[20180429] = "昭和の日";
$holidays[20180430] = "振替休日";
$holidays[20180503] = "憲法記念日";
$holidays[20180504] = "みどりの日";
$holidays[20180505] = "こどもの日";
$holidays[20180716] = "海の日";
$holidays[20180811] = "山の日";
$holidays[20180917] = "敬老の日";
$holidays[20180923] = "秋分の日";
$holidays[20180924] = "振替休日";
$holidays[20181008] = "体育の日";
$holidays[20181103] = "文化の日";
$holidays[20181123] = "勤労感謝の日";
$holidays[20181223] = "天皇誕生日";
$holidays[20181224] = "振替休日";
// カレンダ前処理--END
?>
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>カレンダ</title>
<link href="css/calen63.css"
rel="stylesheet" type="text/css">
</head>
<body>
<div id="calen">
<?php
// カレンダ出力開始
echo $Calendar->thisYear()."年".
$Calendar->thisMonth().
"月のカレンダ<hr>";
echo "<table>";
echo "<tr>
<td>日</td><td>月</td>
<td>火</td><td>水</td>
<td>木</td><td>金</td>
<td>土</td>
</tr>";
while ($Day = $Calendar->fetch()) {
/*
fetchメソッド
最後の要素に達した後は、false を返して
コレクションをリセットする
すなわち
fetch()メソッドは、日付の昇順で 1 回に
1 つの子供を返します。
もうそれ以上子供が見つからない場合には
FALSE を返します。そして
自動的に内部の子供の集合がリセットされます。
よって好きな回数だけこれらをループさせて
使用することができます。
週の最初の場合
*/
if ($Day->isFirst()) {
echo "<tr>";
}
// 日付が入っていない場合
if ($Day->isEmpty()) {
echo "<td> </td>";
/*
は半角スペ-ス
日付が入っている場合
*/
} else { //日付処理開始
// unixタイムスタンプ形式の値を取得
$time =
$Day->thisDay('timestamp');
$day = date('j',$time);
$ymd = date('Ymd',$time);
// 色の設定
if
(array_key_exists($ymd, $holidays))
{
$color = 'red';
} elseif ($Day->isFirst()) {
$color = 'red';
} elseif($Day->isLast()) {
$color = 'blue';
} else {
$color = 'black';
}
// マークされた日付かどうか?
if ($Day->isSelected()) {
/*
カレンダークラスのサブクラスのオブジェクト
が選択されている(例: 今日)場合に True
を返す
*/
echo
"<th align=right style='color:$color'>
$day</th>";
// 今日は太字で表示
} else {
echo
"<td align=right style='color:$color'>
$day</td>";
}
} //日付処理終了
// 週の最後の場合
if ($Day->isLast()) {
echo "</tr>";
}
} //while 終了
echo "</table>";
// カレンダ出力終了
echo "<br>
<a href='?def=2'>来来月</a> 
<a href='?def=1'>来月</a> 
<a href='?def=0'>今月</a>";
?>
</div> <!-- calen END -->
</body>
</html>