先日書いた PHP で変動的にシンプルなカレンダーを出力するソースコードに少し改良を加えました。年月を入れてカレンダーが出力した方が汎用的ですね。
で、さっそくですが、2009年11月のカレンダーを出力したい場合は以下のように書きます。
1 2 3 | <?php calender(2009, 11); ?> |
引数には現在の年と月を書きます。
ソースコード
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | <?php function calender($year, $month) { $now = time(); $data['timestamp'] = mktime(0, 0, 0, $month, 1, $year); $data['count_day'] = date("t", $data['timestamp']); $day = date("w", $data['timestamp'])*-1; $data['week'] = array("日","月","火","水","木","金","土"); $calender='<table border="1">'."\n"; $calender.='<tr>'."\n"; foreach($data['week'] as $key => $value) { switch($key) { case 0: $calender.='<th class="sunday">'.$value.'</th>'."\n"; break; case 6: $calender.='<th class="saturday">'.$value.'</th>'."\n"; break; default: $calender.='<th>'.$value.'</th>'."\n"; break; } } $calender.='</tr>'."\n"; $i=0; $p=1; do { $day++; if($day > 0 && $day <= $data['count_day']) { switch($i%7){ case 0: $calender.='<tr><td class="sunday">'.$day.'</td>'."\n"; break; case 6: $calender.='<td class="saturday">'.$day.'</td></tr>'."\n"; break; default: $calender.='<td>'.$day.'</td>'."\n"; break; } } else { if($i%7==0 && $day > $data['count_day']) { $p=0; } if($p) { switch($i%7){ case 0: $calender.='<tr><td class="sunday"> </td>'."\n"; break; case 6: $calender.='<td class="saturday"> </td></tr>'."\n"; break; default: $calender.='<td> </td>'."\n"; break; } } } } while (++$i && $i < 42); $calender.='</table>'."\n"; echo <<< DOC <p>{$year}年{$month}月のカレンダー</p> {$calender} DOC; } ?> |
出力結果
今月(2009年10月)の出力は以下になります。
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | <p>2009年11月のカレンダー</p> <table border="1"> <tr> <th class="sunday">日</th> <th>月</th> <th>火</th> <th>水</th> <th>木</th> <th>金</th> <th class="saturday">土</th> </tr> <tr><td class="sunday">1</td> <td>2</td> <td>3</td> <td>4</td> <td>5</td> <td>6</td> <td class="saturday">7</td></tr> <tr><td class="sunday">8</td> <td>9</td> <td>10</td> <td>11</td> <td>12</td> <td>13</td> <td class="saturday">14</td></tr> <tr><td class="sunday">15</td> <td>16</td> <td>17</td> <td>18</td> <td>19</td> <td>20</td> <td class="saturday">21</td></tr> <tr><td class="sunday">22</td> <td>23</td> <td>24</td> <td>25</td> <td>26</td> <td>27</td> <td class="saturday">28</td></tr> <tr><td class="sunday">29</td> <td>30</td> <td> </td> <td> </td> <td> </td> <td> </td> <td class="saturday"> </td></tr> </table> |
これは実用的だきっと。
今後の課題
やっぱり祝日をどうやって出力しようかなぁーって感じですね。なかなか他のことばっかりやってて制作が進みません。
あと、お察しの通り2038年問題に引っかかっています。この辺は2038年までの私に任せるとしましょう。
カレンダーの庭園というサイトを制作しました | ウェブルさんのコメント
[...] カレンダーの庭園というサイトを制作しました。 PHP でシンプルに好きな年月のカレンダーを出力するコードを使って3時間くらいで作った即席サイトです。2038年問題を知らなかったので [...]