3

無効な日付(タイムスタンプなど)が渡されたときに、この関数がエラーをスローする理由を誰かが知っていますtry-catchか?

function getAge($date){
    try {
        $dobObject = new DateTime($date);
        $nowObject = new DateTime();

        $diff = $dobObject->diff($nowObject);
    }

    catch (Exception $e) {
        echo 'Error: ',  $e->getMessage();
    }

    return $diff->y;
}

エラー:

致命的なエラー:キャッチされない例外'例外'とメッセージ'DateTime :: _construct()[datetime .--construct]:位置7の時間文字列(422926860)の解析に失敗しました(6):予期しない文字' in ... .php :4スタックトレース:#0 ... .php(4):DateTime-> _construct( '422926860')#1 ... .php(424):getAge( '422926860')#2{main}がスローされます/ ...4行目の.php

事前にどうもありがとうございました!

4

1 に答える 1

6

クリス、致命的なエラーをキャッチすることはできません。少なくとも、キャッチするべきではありません。

ケパロの引用:

PHPは、致命的なエラーを実際にキャッチするべきではないため、致命的なエラーをキャッチするための従来の手段を提供しません。つまり、致命的なエラーからの回復を試みるべきではありません。出力バッファに一致する文字列は、絶対にお勧めできません。

他に方法がない場合は、この投稿を参照して、詳細と可能なハウツーを確認してください。

これを試して:

function isDateValid($str) {

  if (!is_string($str)) {
     return false;
  }

  $stamp = strtotime($str); 

  if (!is_numeric($stamp)) {
     return false; 
  }

  if ( checkdate(date('m', $stamp), date('d', $stamp), date('Y', $stamp)) ) { 
     return true; 
  } 
  return false; 
} 

その後 :

 if isDateValid( $yourString ) {
    $date = new DateTime($yourString);
 }
于 2012-07-05T11:34:02.350 に答える