いろんな日付+時間の入力を統一するクラスです。
◆使い方:
echo my_datetime::parse_datetime( 'Wed, 21 Jan 2010 11:41:25 +0000' );
◆出力:
2010-01-27 11:41:25
◆コード:
class my_datetime { /* ------------------------------------------------------------ */ function parse_datetime( $str ) { $date = self::std_date( $str, $e_part ); $time = self::std_time( $str ); return trim( "$date $time" ); } /* ------------------------------------------------------------ */ function std_time( $time ) { if( preg_match( '/([0-9]{1,2})[:]([0-9]{1,2})[:]([0-9]{1,2})/', $time, $regs ) ) { list( $h, $m, $s ) = array( $regs[1], $regs[2], $regs[3] ); $t_part = sprintf( "%4d:%02d:%02d", $h, $m, $s ); } else if( preg_match( '/([0-9]{1,2})時([0-9]{1,2})分([0-9]{1,2})秒/', $time, $regs ) ) { list( $h, $m, $s ) = array( $regs[1], $regs[2], $regs[3] ); $t_part = sprintf( "%4d:%02d:%02d", $h, $m, $s ); } return $t_part; } /* ------------------------------------------------------------ */ function std_date( $date, &$e_part ) { if( preg_match( '/([0-9]{4})[-.\/]([0-9]{1,2})[-.\/]([0-9]{1,2})(.*)/', $date, $regs ) ) { list( $year, $month, $day ) = array( $regs[1], $regs[2], $regs[3] ); $d_part = sprintf( "%4d-%02d-%02d", $year, $month, $day ); $e_part = $regs[4]; } else if( preg_match( '/([0-9]{4})年([0-9]{1,2})月([0-9]{1,2})日(.*)/', $date, $regs ) ) { $e_part = NULL; list( $year, $month, $day ) = array( $regs[1], $regs[2], $regs[3] ); $d_part = sprintf( "%4d-%02d-%02d", $year, $month, $day ); $e_part = $regs[4]; } else if( ereg( '([0-9]{4})([012][0-9])([012][0-9])(.*)', $date, $regs ) ) { list( $year, $month, $day ) = array( $regs[1], $regs[2], $regs[3] ); $d_part = sprintf( "%4d-%02d-%02d", $year, $month, $day ); $e_part = $regs[4]; } else if( ( $utime = strtotime( $date ) ) !== FALSE ) { $d_part = date( 'Y-m-d', $utime ); } return $d_part; } }
すでに似たようなクラスを持ってたので、ちょっと手を加えてみました。
と、ひとまず、こんな感じでどうでしょう?
0 件のコメント:
コメントを投稿