サンプル・プログラム
解説:曜日と配列
80: /**
81: * 曜日(日本語)を返す
82: * @param int $year 西暦年
83: * @param int $month 月
84: * @param int $day 日
85: * @return string 曜日(日本語)/FALSE:1970~2038年の間しか計算できない
86: */
87: function getWeekJp($year, $month, $day) {
88: static $tbl_week = array('日', '月', '火', '水', '木', '金', '土', '日');
89:
90: //引数エラーチェック
91: if ($year < 1970 || $year > 2038) return FALSE;
92:
93: $num = date('w', mktime(0, 0, 0, $month, $day, $year)); //曜日番号
94: return $tbl_week[$num];
95: }
$変数名[0] = '日';となる。[ ] の中にキーを記述する。
$変数名[1] = '月';
‥‥
$変数名[6] = '土';
いちいち変数名を記述するのは面倒なので、関数 array を使い、
$変数名 = array('日', '月', '火', '水', '木', '金', '土', '日');と表記することもある。このとき、暗黙の了解として、キーは [0] からはじまる。
このように、あらかじめ決まっている表形式のデータ構造を配列にあらわしたものを「テーブル」と呼んだりする。さまざまな方面で応用される手法である。
ユーザー関数 getWeekJp は、組み込み関数 date が返す曜日番号をキーとし、日本語の曜日番号を値とする配列 $tbl_week をテーブルとしている。
与えられた年月日から曜日番号を算出するには、 mktime 、 date という2つの組み込み関数を利用する。
なお、古いPHP処理系(Windows版 PHP4.xなど)では、関数 date に指定できる年号が1970年(昭和45年)~2038年の間に限られる。そこで、この範囲外の年号を指定した場合はエラーとし、FALSEを返すようにした。
解説:月の日数
97: /**
98: * 指定した月の日数を返す
99: * @param int $year 西暦年
100: * @param int $month 月
101: * @return int 日数/FALSE:引数の異常
102: */
103: function getDaysInMonth($year, $month) {
104: static $days = array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
105: if ($month < 1 || $month > 12) return FALSE;
106: $days[2] = isLeapYear($year) ? 29 : 28; //閏年の判定
107:
108: return $days[$month];
109: }
1月から12月までの月の日数は概ね固定であるが、閏年の年だけ2月が29日になる。
閏年の判定関数については、「PHPで閏年かどうか判定する」で紹介したものを流用している。
参考サイト
- PHPで閏年かどうか判定する:ぱふぅ家のホームページ
- PHPで祝日を求める:ぱふぅ家のホームページ
- PHPで日本語対応dateを作る:ぱふぅ家のホームページ
- PHPで13日の金曜日を列挙:ぱふぅ家のホームページ
- PHPで年月日を入力(プルダウン方式):ぱふぅ家のホームページ
- PHPで日付入力:カレンダーから選択:ぱふぅ家のホームページ
- PHPで3ヶ月カレンダーを作る:ぱふぅ家のホームページ
- PHPで地図で指定した場所の週間カレンダーを表示:ぱふぅ家のホームページ
(2021年2月6日)PHP8対応