【问题标题】:yii criteria condition between date日期之间的 yii 标准条件
【发布时间】:2013-10-12 12:15:44
【问题描述】:

我正在尝试查找特定用户的时间重叠,我认为我的逻辑会捕获所有圈数,但这仅在 start OR end 位于时间范围之间但如果两者都是 start 和 end 则没有找到介于一些记录时间段之间!

 $tempModel = clone $this; // clone model

 $criteria->addCondition('
      ( t.user = :user AND (t.startDate >= :start AND t.startDate <= :end ))
      OR
      ( t.user = :user AND (t.endDate >= :start AND t.endDate <= :end ))
  ');
  $criteria->params = array(
        ':start' => date('Y-m-d', strtotime($tempModel->startDate)),
        ':end' => date('Y-m-d', strtotime($tempModel->endDate)),
        ':user ' => $tempModel->userID ,
    );

 if(!empty($tempModel->idUserTime)) // dont find updated record
            $criteria->addCondition('t.idUserTime != ' . $tempModel->idUserTime);

 $criteria->addCondition('t.active = 1'); // if this is an active user time

 $hasRecord = Usertime::model()->findAll($criteria);

问题出在哪里?

【问题讨论】:

    标签: php yii


    【解决方案1】:

    如果每个日期至少有一个边界在另一个边界之间,则两个日期重叠:

    ...
    WHERE some_other_conditions AND (
        date1.start BETWEEN date2.start AND date2.end OR
        date1.end   BETWEEN date2.start AND date2.end OR
        date2.start BETWEEN date1.start AND date1.end OR
        date2.end   BETWEEN date1.start AND date1.end
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-29
      • 2014-07-24
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 2022-10-22
      • 1970-01-01
      • 2011-11-28
      相关资源
      最近更新 更多