2013-03-11 172 views
3

我想過濾結果爲如何在Propel 1.6中按日期過濾日期時間列?

$searchDate = "2013-03-01"; 

$query->usePublicationQuery() 
      ->filterByPublishedAt($searchDate) 
      ->endUse(); 

然而,問題是,在此列中的值還包含時間,即他們實際時間戳(如「2013-03-01 08: 27:12「),我不允許在模式中改變它。那麼,我怎麼可能匹配純粹的日期忽略了時間呢?以上查詢只與時間2013-03-01 00:00:00相匹配的條目。但我希望2013-03-01的所有參賽作品都可以作​​爲日期,無論時間如何。

+2

我想你選擇最好的解決方案。 – j0k 2013-03-11 11:50:26

+0

似乎是一個自我回答的問題。感謝您的反饋! – twigmac 2013-03-12 09:36:11

+0

然後您可以從您的問題中刪除解決方案,將其作爲答案發布並接受它:) – j0k 2013-03-12 09:37:39

回答

9

我已經想通了這個解決方案,它的工作原理:

->filterByPublishedAt(array("min" => $searchDate." 00:00:00", "max" => $searchDate." 23:59:59")) 
0

對於使用條件的情況下,那些不希望/不能切換到編寫查詢的「新路」:只需使用標準:: CUSTOM而不是Criteria :: LIKE。

例如

$c = new Criteria(); 
$c->add(SomePeer::CREATED_AT, $date.'%', Criteria::LIKE); 

成爲

$c = new Criteria(); 
$c->add(SomePeer::CREATED_AT, SomePeer::CREATED_AT.' LIKE "'.$date.'%"',Criteria::CUSTOM); 

這樣,行走不會試圖將其轉換爲一個DateTime對象。