symfony – Criteria で SQL の interval が使えない

日付範囲指定をするのに interval が使いたくて
Criteria のドキュメントやソースを追ったところ、
 
Criteria::CURRENT_DATE,
Criteria::CURRENT_TIME,
Criteria::CURRENT_TIMESTAMP
 
という ANSI SQL 関数は定義されていたのですが、SQL で日付の加減指定をする方法はないようです。
 
次のように

$c = new Criteria();
// 本日更新されたレコード
$c->add(FooTablePeer::UPDATED_AT,
    Criteria::CURRENT_DATE, Criteria::GREATER_EQUAL);

と単体で指定するのは有効ですが、

$c = new Criteria();
 // 過去 24 時間以内に更新されたレコードのつもり
$c->add(FooTablePeer::UPDATED_AT,
    Criteria::CURRENT_TIMESTAMP . ” – interval 1 day”,
    Criteria::GREATER_EQUAL);

のように、値に式を含めた場合、生成される SQL 文は

SELECT * FROM foo_table WHERE foo_table.updated_at >= ‘CURRENT_TIMESTAMP – interval 1 day’

と、エスケープ/クオート処理の対照になってしまい、望む結果を得ることはできません。
 
代替の方法として
A. Propel::getConnection() で得られる接続インスタンスに対して生のクエリを発行する
B. php の date(), time() 関数で日時を計算する
 
の二つの方法があります。
 
前者については Definitive Guide to symfony の8章の「生のSQLクエリを使う」の項を参照すると具体的な手順が書いてありますが、今回はデータベースサーバとWebサーバの時間差を気にしなくていい環境だったので、簡単に後者で対応しました。
 

$c = new Criteria();
// 過去 24 時間以内に更新されたレコード
$c->add(FooTablePeer::UPDATED_AT,
    date(‘Y-m-d H:i:s’, time() – 24 * 60 * 60),
    Criteria::GREATER_EQUAL);