PHPでISO 8601(RFC 3339)形式のタイムスタンプを解釈する

(1/1)
今回は、「PHP で ISO 8601 形式のタイムスタンプを表示する」の逆で、ISO 8601形式のタイムスタンプを年月日時分秒に分解するプログラムを紹介する。

登場する関数は、いままで使ったものばかりなので、とくに説明はしない。ISO 8601 形式を解釈するための正規表現が肝である。

ISO 8601 形式は RFC 3339 とほぼ同じ内容である。日本では、JIS X 0301 として規格化されている。

(2019 年 5 月 4 日)プログラムを大幅に改訂した。

サンプル・プログラムの実行例

PHPでISO 8601(RFC 3339)形式のタイムスタンプを解釈する

サンプル・プログラムのダウンロード

圧縮ファイルの内容
dtformat.phpサンプル・プログラム本体

解説:ISO 8601形式のタイムスタンプを解釈する

ユーザー関数 parse_dtformat は、ISO 8601 を解釈し、配列に格納して返す。解釈には、正規表現を利用した。

0125: /**
0126:  * ISO 8601(RFC 3339)形式のタイムスタンプを解釈する
0127:  * @param string $str ISO 8601(RFC 3339)形式テキスト
0128:  * @return string 解釈結果を格納する配列/年,月,月,日,時,分,秒の順に格納
0129:  *                  NULL:エラー
0130: */
0131: function parse_dtformat($str) {
0132:     $pat = '/(\d{4})(?:-(\d{2})(?:-(\d{2})(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d+))?)?(Z|([+-]\d{2}):(\d{2}))?)?)?)?/i';
0133:     
0134:     return (preg_match($pat$str$match) > 0) ? $match : NULL;
0135: }

解説:parse_dtformat()の結果を日本語テキストに変換

ユーザー関数 dt2str は、ISO 8601 は、parse_dtformat の解釈結果(配列)を日本語テキストに変換する。

0137: /**
0138:  * parse_dtformat()の結果を日本語テキストに変換
0139:  * @param array $arr 解釈結果配列
0140:  * @return string 日本語テキスト
0141: */
0142: function dt2str($arr) {
0143:     static $tbl = array(
0144: 1=>'%d年',
0145: 2=>'%d月',
0146: 3=>'%d日',
0147: 4=>'%d時',
0148: 5=>'%d分',
0149: 6=>'%d秒',
0150: 8=>'(タイムゾーン %d時',
0151: 10=>'%d分)',
0152: );
0153: 
0154:     $res = '';
0155:     foreach ($tbl as $key=>$form) {
0156:         if (isset($arr[$key])) {
0157:             $res .= sprintf($form$arr[$key]);
0158:         }
0159:     }
0160:     return $res;
0161: }

参考サイト

(この項おわり)
header