UNIXエポック以前の日付

UNIXエポック以前の日付とは1970年1月1日以前のことです。PHPのタイムスタンプは1970年以降の秒数で、記録する必要がある大抵の日付に対して立派に動作します。より離れた過去で誕生日もしくは他の日付を追跡する必要がある時は作業が手の込んだものになります。

PHPはUNIXエポック以前のタイムスタンプの取り扱いがとても貧弱であるのと同様にPropelも貧弱な仕事をします。PHPでUNIXエポック以前の日付を扱うことに関してはいくつかの問題があります:

  1. strtotime()はどのプラットフォームでもUNIXエポック以前の日付を正しく取り扱いしません。
  2. WindowsプラットフォームはUNIXエポック以前の日付を表現するために負の整数を使うことはできません。

PHPでこの欠点を取り扱うために、特別なPropelカラムタイプの一組が作成されました。これらのカラムタイプはPropelもしくは下にあるCreoleレイヤによって特別な(date/time)対応を受けません:

  • BU_DATE
  • BU_TIMESTAMP

(BU = Before Unix)

では、例です:

<column name="birthdate" type="BU_DATE" required="true"/>

これらのカラムタイプを使うことでそれぞれのネイティブのSQLタイプの正しいDATEとTIMESTAMPを使うSQL DDLが生成されます; しかしながらオブジェクトモデルレイヤはこれらのカラムのためにスマートなdate/time変換を実行せず下層のCreoleレイヤによってvarchar(文字列)カラムのように取り扱われます。このことはデータベースが理解するフォーマットで日付を指定しなければならないことを意味します。例です:

$person->setBirthdate('1985-01-01');