FC2ブログ

PHPでカレンダーを作成

カレンダーを作成するPHPのクラスは色々と公開されていますが、今回僕がほしかったのは

・ 週表示、月表示用の日付の配列のみを取得できるクラス

・ 祝日判定に対応しているもの

ようは、シンプルに日付関連のデータだけいい感じに取得できて、あとはこっちで自由にやりたいっていう訳ですw

例によって既にあると思いますが、暇だったので個人的に使いやすいものを作ってみました。

 

>>PHP カレンダー作成用クラス

 

これを使ってカレンダーを作る場合は、

1 <?php
2 require('./calendar/calendar.php');
3 $Calendar = new Calendar(array(
4     //日付フォーマットdate関数に順ずる形のみ受付
5     'format'     => 'Y-m-d',
6     //0から6までの曜日名
7     'weeks'      => array('日''月''火''水''木''金''土''日'),
8     //週の開始曜日No
9     'start_week' => 0,
10     //基準日、formatにのっとった形式
11     'now'        => null,
12     //モード week:一週間、calendar:一ヶ月を週区切り、month:一ヶ月
13     'mode'       => 'calendar',
14 ));
15 ?>
16 <table border="1">
17     <tr>
18 <?php
19 foreach ($Calendar->weeks() as $key => $var) {
20 ?>
21         <th><?php echo $var ?></th>
22 <?php
23 }
24 ?>
25     </tr>
26 <?php
27 foreach ($Calendar->days() as $days) {
28 ?>
29     <tr>
30 <?php
31     foreach ($days as $day) {
32 ?>
33         <td><xmp><?php echo print_r($day) ?></xmp></td>
34 <?php
35     }
36 ?>
37     </tr>
38 <?php
39 }
40 ?>
41 </table>

という感じです。

これでカレンダーが作成できます。33行目で$dayをまるごとダンプしていますが、$dayは配列で、内容は下記の値が代入されています。

 mday        :日にち
 wday        :週番号(0が日曜日で6が土曜日)
 mon         :月
 year        :年
 yday        :その年の通算の日数
 weekday     :英語の曜日名
 month       :英語の月名
 date        :$settings['format']に準じた書式の日付
 weekname    :$settings['weekname']に準じた曜日名
 status      :今の日にちと比較して過去なら past、当日ならtoday、未来なら future が代入される
 in_month    :現在選択中の月に属している場合は true、そうでない場合は false
 selected    :現在選択中の日の場合は true、それ以外はfalse
 holiday     :休日名
 time        :タイムスタンプ


 

また、3行目、インスタンス生成時に配列を渡していますが基本的に全て省略可能です。

よくある感じで、↓みたいなカレンダーを作る場合は

1 <?php
2 require('./calendar/calendar.php');
3 $date = isset($_GET['date']) ? $_GET['date'] : null;
4 $mode = isset($_GET['mode']) ? $_GET['mode'] : 'calendar';
5 $Calendar = new Calendar(array(
6     //週の開始曜日No
7     'start_week' => 0,
8     //基準日、formatにのっとった形式
9     'now'        => $date,
10     //モード week:一週間、calendar:一ヶ月を週区切り、month:一ヶ月
11     'mode'       => $mode,
12 ));
13 ?>
14 <table border="1">
15     <tr>
16         <th colspan="7">
17             <a href="./test.php?date=<?php echo $Calendar->prev('date') ?>&mode=<?php echo $mode ?>"><前</a>
18             <a href="./test.php?mode=<?php echo $mode ?>">|今日|</a>
19             <a href="./test.php?date=<?php echo $Calendar->next('date') ?>&mode=<?php echo $mode ?>">次></a>
20         </th>
21     </tr>
22     <tr>
23 <?php
24 foreach ($Calendar->weeks() as $key => $var) {
25 ?>
26         <th><?php echo $var ?></th>
27 <?php
28 }
29 ?>
30     </tr>
31 <?php
32 foreach ($Calendar->days() as $days) {
33 ?>
34     <tr>
35 <?php
36     foreach ($days as $day) {
37 ?>
38         <td style="width:70px;vertical-align:top;"><?php echo date('n/j'$day['time']) ?><br /><?php echo $day['holiday'] ?></xmp></td>
39 <?php
40     }
41 ?>
42     </tr>
43 <?php
44 }
45 ?>
46     <tr>
47         <th colspan="7">
48             <a href="./test.php?date=<?php echo $date ?>&mode=week">週表示</a>|
49             <a href="./test.php?date=<?php echo $date ?>&mode=calendar">月表示</a>
50         </th>
51     </tr>
52 </table>

こんな感じですね。

あとは、cssでちょこちょこやれば

ちょっとしたスケジューラーみたいな感じにもできます。

ちなみに、祝日判定に関しては

http://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm

を参考にさせていただきました。

 

是非お試しくださいませ。

スポンサーサイト



コメントの投稿

非公開コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

spanについて

PHP初心者です。便利に使わせていただいています。

spanメソッドについてですが、

$test = $Calendar->span('Y-m-d',false);

という風に使うと「Only variables should be passed by reference」エラーが出てしまいます。第二引数をtrueにした場合は大丈夫です。

使い方が間違っているのでしょうか?

Re: spanについて

kuroさん
お返事がおそくなりました。
該当のエラーですが、下記のようにcalender.phpを修正してください。
523行目
$start = array_shift(array_values($this->days));
$end = array_pop(array_values($this->days));

これを
$tmp = array_values($this->days);
$start = array_shift($tmp);
$end = array_pop($tmp);


array_shift、popが関数を返却値を直接引数にいれると「参照渡しできねーぞ!」という警告がでていたようです。
申し訳ないです。。。
一応アップされているものも修正しておきました。


承認待ちコメント

このコメントは管理者の承認待ちです

承認待ちコメント

このコメントは管理者の承認待ちです

承認待ちコメント

このコメントは管理者の承認待ちです
プロフィール

pg103

Author:pg103
とりあえず、いろいろ作ってみようと思っているプログラマーです。

【僕がお気に入りの本】

CakePHP 1.3によるWebアプリケーション開発―オープンソース徹底活用

Web制作の現場で使う jQueryデザイン入門 (WEB PROFESSIONAL)

MySQL全機能バイブル ~現場で役立つAtoZ~

プロのための Linuxシステム構築・運用技術 (Software Design plus)

最新記事
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる