PHPサンプル
UPDATE:2017年12月04日
PHP カレンダーを作る
PHP4 PHP5 PHP7
サンプルコード
checkdate()関数、date()関数、mktime()関数 を利用してシンプルなカレンダーを作成します。
日本語書式
TRUE か FALSE の論理値 = checkdate(月, 日, 年);
書式 date()
日付文字列 = date(フォーマット [,タイムスタンプ]);
//[ ]省略可(タイムスタンプがない場合現在日付となる)
書式 mktime()
指定日時のUNIXタイムスタンプ = mktime(時, 分, 秒, 月, 日, 年);
サンプル
TRUE か FALSE の論理値 = checkdate(月, 日, 年);
書式 date()
日付文字列 = date(フォーマット [,タイムスタンプ]);
//[ ]省略可(タイムスタンプがない場合現在日付となる)
書式 mktime()
指定日時のUNIXタイムスタンプ = mktime(時, 分, 秒, 月, 日, 年);
サンプル
1 2 3 4 | <?php //2017/11月末 echo date('Y年m月d日',mktime(0,0,0,12,0,2017)); ?> |
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | <!-- サンプルコード --> <h3>カレンダー年月選択</h3> <?php //年月の指定があれば if(isset($_POST['yyyy']) && $_POST['yyyy'] != '' && isset($_POST['mm']) && $_POST['mm'] != ''){ $yyyy = $_POST['yyyy']; $mm = $_POST['mm']; //指定がなければ本日の年月 }else{ $yyyy = date('Y'); $mm = date('m'); } $dd = 1; ?> <form method="POST" action="<?php $_SERVER['PHP_SELF']; ?>"> <select name="yyyy"> <?php for($i = 1990; $i <= 2030; $i++){ echo '<option value="'.$i.'"'; if($i == $yyyy) echo ' selected'; echo '>'.$i.'</option>'."\n"; } ?> </select>年 <select name="mm"> <?php for($i = 1; $i <= 12; $i++){ echo '<option value="'.$i.'"'; if($i == $mm) echo ' selected'; echo '>'.$i.'</option>'."\n"; } ?> </select>月 <input type="submit" value="送信"> </form> <h3>カレンダー</h3> <?php //カレンダー関数 function calendar($yyyy, $mm, $dd){ //選択日のタイムスタンプ $iSctDayTimeStamp = mktime(0,0,0,$mm,$dd,$yyyy); ?> <table border ="0" bgcolor="#cccccc" cellspacing="1"> <?php ### 月列 if(checkdate($mm, 1, $yyyy)){ ?> <tr> <td bgcolor="#ffffff" colspan="7"> <?php echo $yyyy; ?>年<?php echo $mm; ?>月 (<?php echo date('t',mktime(0, 0, 0, $mm, 1, $yyyy)); ?>日間) </td> </tr> <?php } ?> <?php ### 曜日列 ?> <tr> <td bgcolor="#ffd0d0">日</td> <td bgcolor="#f7ffde">月</td> <td bgcolor="#f7ffde">火</td> <td bgcolor="#f7ffde">水</td> <td bgcolor="#f7ffde">木</td> <td bgcolor="#f7ffde">金</td> <td bgcolor="#def9ff">土</td> </tr> <?php ### 日付列 //曜日NO $iWNoMthFst = date('w',mktime(0,0,0,$mm,1,$yyyy));//0:日~6:土 //日付が始まる前の空白 for($iFstWeekBnk = 0 ;$iFstWeekBnk < $iWNoMthFst ;$iFstWeekBnk++){ ?> <td align='center' bgcolor='#FFFFFF'> </td> <?php } //日付記述 年月日の妥当性がtrueであればループ for($dd = 1 ;checkdate($mm, $dd, $yyyy); $dd++ ){ //本日のタイムスタンプ $iTodayTimeStamp = mktime(0,0,0,date('m'),date('d'),date('Y')); //指定年月のループ日付のタイムスタンプ $iDisplayDaysTimeStamp = mktime(0,0,0,$mm,$dd,$yyyy); //1日が日曜日のとき 1 8 15 22 29が == 1となる //日曜日 if(($dd+$iWNoMthFst)%7 == 1){ echo '<tr><td bgcolor="'; //本日 if($iTodayTimeStamp == $iDisplayDaysTimeStamp) echo '#ffe293'; else echo '#ffd0d0'; ?> "><?php echo $dd; ?></td> <?php } //土曜日 elseif(($dd+$iWNoMthFst)%7 == 0){ echo '<td bgcolor="'; //本日 if($iTodayTimeStamp == $iDisplayDaysTimeStamp) echo '#ffe293'; else echo '#def9ff'; ?> "><?php echo $dd; ?></td></tr> <?php } //平日 else{ echo '<td bgcolor="'; //本日 if($iTodayTimeStamp == $iDisplayDaysTimeStamp) echo '#ffe293'; else echo '#ffffff'; ?> "><?php echo $dd; ?></td> <?php } } //指定月最終日の曜日$ddは32になっている $iWNoMthEnd = date('w',mktime(0,0,0,$mm,$dd,$yyyy)); if($iWNoMthEnd != 0){ //もし32が日曜日すなわち0ならそれで終了 for($iWeekBlank = 0 ; $iWeekBlank < 7-$iWNoMthEnd; $iWeekBlank++){ //0以外は が必要 echo '<td align="center" bgcolor="#FFFFFF"> </td>'; } } ?> </tr></table> <?php }// end function ?> <?php //カレンダー表示 calendar($yyyy, $mm, $dd); ?> |
実行結果
カレンダー年月選択
カレンダー
2013年11月 (30日間) | ||||||
日 | 月 | 火 | 水 | 木 | 金 | 土 | 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 |
タグ(=記事関連ワード)
日付
投稿日:2017年12月1日
最終更新日:2017年12月04日
最終更新日:2017年12月04日
このカテゴリの他のページ
この記事へのコメント
トラックバックurl
https://wepicks.net/phpsample-date-calendar/trackback/