2012-05-12 5 views
2

私は数ヶ月または日数が未知のデータベース(1999-01-00/1999-00-00)を持っています。DateTime()を使用して部分的に不明な日付をデータベースからフォーマットしますか?

今、私はDateTime()を使用して、満杯の日をフォーマットしています。これはうまくいきます。

私は未知の月と日のためにある1999ためSep 1999

$DateTime->format('Y');を出力$DateTime->format('M Y');を使用して、未知日間略語が、知らヶ月を持っているしたいと思います。

DateTime()00の値は数か月/日では許可されません。どうすれば回避できますか?

答えて

2

残念ながら、DateTimeクラスはUNIXタイムスタンプのラッパーです。 (私はかなりかなりだと言いました。それ以上のことがあるのは分かります)。日付とのやり取りは、以前の期間の同義語としてゼロを計算するという要素の1つでした。 (、例えば:4月0日は3月31日と計算されます)

実際には、PHPの組み込み日付機能をバイパスして、自分で作成する必要があります。良いニュースは、あなたが本当にこれを行うことができるということです。 MySQLは実際には単純な文字列として値を返します。日付に関しては、実際のCライブラリが使用する自然な応答はISO 8601文字列として日付を返すことです。 (かなりの再びそのフレーズあります。)

私はこれを書いていた場合、私はmysql_fetch_row(または独自のメソッド)との生の値を読み、すべての要素(すなわちかどうかを確認します:年、月、日)が定義される。そうであれば、DateTimeメソッドを使用します。そうでなければ、定義されている要素を引き離し、それに応じてフォーマットするコードを書くでしょう。

+0

バマー、ありがとう。 – Tek

3

ちょうど私が探していた(そして聞きたくなかった)。

ここは、私のような怠惰なあなたのための基本的なPHP関数です。

function formatDatabaseDate($date, $delimiter = '/') 
{ 
    // this function works only on mysql date fields, 
    // and takes into account partial dates. 
    if ($date != '' && $date != NULL) 
    { 
     $datePieces = explode('-', $date); 
     if (count($datePieces) == 3 && 
      strlen($datePieces[0]) == 4 && 
      strlen($datePieces[1]) == 2 && 
      strlen($datePieces[2]) == 2) 
     { 
      $datestring = ''; 

      $months['01'] = 'Jan'; 
      $months['02'] = 'Feb'; 
      $months['03'] = 'Mar'; 
      $months['04'] = 'Apr'; 
      $months['05'] = 'May'; 
      $months['06'] = 'Jun'; 
      $months['07'] = 'Jul'; 
      $months['08'] = 'Aug'; 
      $months['09'] = 'Sep'; 
      $months['10'] = 'Oct'; 
      $months['11'] = 'Nov'; 
      $months['12'] = 'Dec'; 

      if ($datePieces[2] != '00' && $datePieces[1] != '00') 
      { 
       $datestring = $datePieces[2] . $delimiter 
          . $months[$datePieces[1]] . $delimiter 
          . $datePieces[0]; 
      } 
      else if ($datePieces[1] != '00') 
      { 
       $datestring = $months[$datePieces[1]] . $delimiter 
          . $datePieces[0]; 
      } 
      else 
      { 
       $datestring = $datePieces[0]; 
      } 

      return $datestring; 

     } 
     else 
     { 
      trigger_error('date is not in a valid mysql format'); 
      return false; 
     } 
    } 
    else 
    { 
     trigger_error('empty date passed to format command'); 
     return false; 
    } 
} 
+0

与えられたコードは私にとって本当に便利です。ありがとう:) –

関連する問題