CodeIgniterの学習 33 - 日付フォーマットの変換をMySQL_DATETIME_Helper改を組み込んで楽にしてみる
今日はCodeIgniterにMySQL_DATETIME_Helper( http://codeigniter.com/wiki/MySQL_DATETIME_Helper/ )を組み込んで、
日付ヘルパを拡張してみる。ついでに日本用に少々改造してみた。
日付の変換って面倒だ。mktimeとか使いだすと、頭が混乱するので嫌いなのだ。
導入
ソースはwikiから取ってくる。http://codeigniter.com/wiki/MySQL_DATETIME_Helper/
のソースを2つ共コピーして、
application/helpers/MY_date_helper.phpとして保存すればよい。
改造してみる
日本向けのフォーマットに一部改造した。以下抜粋
1)デフォルトフォーマットの変更
-function mysqldatetime_to_date( $datetime = "", $format = "d.m.Y, H:i:s" ) +function mysqldatetime_to_date( $datetime = "", $format = "Y/m/d H:i:s" )
-function timestamp_to_date( $timestamp = "", $format = "d/m/Y H:i:s" ) +function timestamp_to_date( $timestamp = "", $format = "Y/m/d H:i:s" )
の2カ所
2)「年」「月」「日」「時」「分」「秒」の区切りに対応
<?php //上略 function date_to_timestamp( $datetime = "" ) { if ( !preg_match( "/^(\d{2}(\d{2})?)[.\- \/年](\d{1,2})[.\- \/月](\d{1,2})日?( (\d{1,2})(時|[:時](\d{1,2})(|分|([:分](\d{1,2})秒?)?)))?$/iu", $datetime, $date ) ) { return FALSE; } $year = $date[1]; $month = $date[3]; $day = $date[4]; $hour = ( empty( $date[6] ) ) ? 0 : $date[6]; $min = ( empty( $date[8] ) ) ? 0 : $date[8]; $sec = ( empty( $date[11] ) ) ? 0 : $date[11]; /* //元ネタはこうなっている if (!preg_match("/^(\d{1,2})[.\- \/](\d{1,2})[.\- \/](\d{2}(\d{2})?)( (\d{1,2}):(\d{1,2})(:(\d{1,2}))?)?$/", $datetime, $date)) return FALSE; $day = $date[1]; $month = $date[2]; $year = $date[3]; $hour = (empty($date[6])) ? 0 : $date[6]; $min = (empty($date[7])) ? 0 : $date[7]; $sec = (empty($date[9])) ? 0 : $date[9]; */ return mktime( $hour, $min, $sec, $month, $day, $year ); } //下略 ?>
に変更した。(ソースはUTF-8で保存)
動作確認
コントローラ側で、
- 適当なダミーテーブルに日付を突っ込んで、これを変換してみた。(1,2,3)
- 現在時刻を変換してみた。(4,5)
- 埋め込みの日付を変換してみた。(6,7)
<?php //上略 // 日付ヘルパ $this -> load -> helper( 'date' ); // データ取得 $q = $this -> db -> get( 'dummytable' ); // テーブルのヘッダ $this -> table -> set_heading('id', '1)作成日<br>mysqlのDATETIME型 $row -> created', '2)DATETIME型を日付に<br>mysqldatetime_to_date($row -> created,"y/m/d H:i")', '3)DATETIME型をタイムスタンプに mysqldatetime_to_timestamp($row -> created)', '4)タイムスタンプをDATETIME型に<br>timestamp_to_mysqldatetime(time())', '5)タイムスタンプを日付に<br>timestamp_to_date(time(),"y年m月d日 H時i分")', '6)日付をタイムスタンプに<br>date_to_timestamp("88年12/24 12時00分")', '7)日付をDATETIME型に<br>date_to_mysqldatetime("1988年12月24日 12時00分03秒")' ); // テーブルの生成 foreach ( $q -> result() as $row ) { $this -> table -> add_row( $row -> id , $row -> created, mysqldatetime_to_date($row -> created,"y/m/d H:i") , mysqldatetime_to_timestamp($row -> created) , timestamp_to_mysqldatetime(time()) , timestamp_to_date(time(),"y年m月d日 H時i分") , date_to_timestamp("88年12/24 12時00分"), date_to_mysqldatetime("1988年12月24日 12時00分03秒") ) ; } $data['tblList'] = $this -> table -> generate(); //下略 ?>
画面
なんとなく良い感じ。