| PHP の関数 date では英語曜日名や西暦の表記しかできないが、これを日本語曜日名(月、火‥‥日)と元号(明治、大正‥‥)対応させる関数を作ることにする。 |
サンプル・プログラム |
|
| プログラムを実行すると、ランダムに選ばれた 10 日分の年月日と元号、日本語曜日名を表示する。 | |
プログラムの解説:UNIX時間を元号に変換 |
|
|
0053: /** |
|
|
ユーザー関数 time2gengo は、UNIX 時間*を元号に変換する。 UNIX 時間とは、1970 年 1 月 1 日 00 時 00 分 00秒からの累計秒数である。PHP を含め、UNIX 処理系でよく用いられる。 元号は、1 月 1 日に切り替わるわけではない。 たとえば「平成」の場合、1989 年 1 月 7 日に「昭和」から切り替わった。このため、昭和 64 年(1989 年)1 月 7 日は存在するが、昭和 64 年 1 月 8 日は存在せず、平成元年 1 月 8 日となる。 そこで、内部で関数 date を呼び出し、元号の切り替わりの西暦年月日かどうかで判断するようにした。 「元年」という文字列では計算しにくいので、「1 年」とした。 なお、UNIX 時間は 1970 年から始まるため、実際に適用される元号は「昭和」「平成」の 2 つしかない。 |
プログラムの解説:jdate関数 |
|
|
0077: /** |
|
|
ユーザー関数 jdate は、PHP の組み込み関数 date とほとんど同じ機能を保つ。引数のフォーマット文字列に 'J' が含まれている場合のみ、これを日本語の曜日名(月、火‥‥日)に変換する。
流れ的には、内部で関数 date を呼び出す。 関数 date を呼び出す前に、フォーマット文字列に 'J' があれば、これを日本語曜日に置換する。同様に、フォーマット文字列に 'K' があれば元号に、'k' があれば元号年に置換するようにした。 フォーマット文字列 'J' を曜日に変換するには、関数 date にフォーマット文字列 'D' を与え、得られる英語曜日名を日本語曜日名に変換する。この仕組みは、前回、「PHP で1ヶ月カレンダーを作る」で説明したテーブルを利用している。 このとき、関数 mb_ereg_replace を用いる。これは正規表現置換と呼ばれる手法で、その詳細は「PHP で正規表現」をご覧いただきたい。 ここでは、 変数 $format に含まれる全ての 'J' を $str に置き換える、という呪文だと覚えておいてほしい。 なお、フォーマット文字列がシフト JIS であると正常に変換できないことがある。これは関数 date でも同じ事である。UTF-8 や EUC-JP であれば問題は無い。 ユーザー関数 jdate は関数 date と同様、第二引数に UNIX 時間を指定できる。省略した場合には現在時刻が採用される。 PHP は、このように引数の数を不定にできる可変長引数リストという仕組みが用意されている。 ここでは、関数 func_num_args で引数の数を調べ、1 個であれば現在時刻 [time]php_function] を、それ以外であれば第2 引数を func_num_args で取り出す。 |
参考書籍 |
|
|
|
参考サイト |
|
|
|
|
|
|
|
2009年07月29日 作成
2009年08月23日更新
Copyright by studio pahoo, (C)2009
(※)本ページはリンクフリーですが、複製・転載時にはご一報ください。 ★本ページへのご意見・ご質問・お便りは、ここをクリックしてください。 |