2

私はデータ型のOracleデータベースフィールドを持っていますtimestamp.cakephpコントローラーのこの値を日付形式に変換したいのですが、正しく機能していません.1969年を示しています.

28-NOV-07 11.49.55.000000 AMこれはデータベースを見つけた後に来て、私はそれをに変換したい28.11.07 11:49:55.000

4

2 に答える 2

2

次のようなことを試すことができます:

$timestamp = "28-NOV-07 11.49.55.000000 AM";
$date = DateTime::createFromFormat( 'd-M-y h.i.s.u A', $timestamp );

日付を取得したら、希望の形式で新しい日付を作成します。

私はそれをテストしていませんが、そのようなものはうまくいくはずです。

于 2012-10-15T11:44:31.703 に答える
0

私はこれを長い間しなければなりませんでした。正規表現で日付を解析し、mktime() を使用して UNIX タイムスタンプを取得することを意味します。PHP では、次のようになります。

// our date in oracle-style 
$orcl_date = "22-MAY-13 12.00.00.000000 AM";

// painfully extract date related parts
preg_match( '/^(\d{2})-(\w{3})-(\d{2})\s(\d{2})\.(\d{2})\.(\d{2})\.(\d{6})\s(AM|PM)/' , $orcl_date , $matches );
@list( $all , $day , $month , $year , $hour , $minute , $sec , $minisec , $ampm ) = $matches;

// do AM/PM illogical behaviour
if ( $ampm == 'AM' ) { // 12 AM (midnight) will result in zero.
    if ( $hour == 12 )
        $hour -=  12;
} else { 
    if ( $hour != 12 ) // 12 pm (high noon) 
        $hour +=  12;
}

$month = array_search( $month , array("","JAN","FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEZ" ) );

// oracle does not give us any information about the century. We assume that it's the current one.
$year += 2000;

// make a unix timestamp.
$timestamp = mktime( $hour , $minute , $sec , $month , $day , $year );

$result = strftime('%Y-%m-%d %H:%M:%S',$timestamp);
于 2013-03-28T16:14:04.677 に答える