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>&nbsp;</td>";
/*
 &nbsp;は半角スペ-ス 
 日付が入っている場合
*/    
    } 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>&emsp;
  <a href='?def=1'>来月</a>&emsp;
  <a href='?def=0'>今月</a>";
?>
</div> <!-- calen END -->
</body>
</html>