代码之家  ›  专栏  ›  技术社区  ›  lin

Yii2-模型:查找两个不同日期的范围

  •  0
  • lin  · 技术社区  · 7 年前

    我想选择两个不同日期范围内的项目( datetime dateStart dateEnd .

    表格数据示例:

    id | dateStart  | dateEnd
    ---+------------+-----------+
    3  | 2017-01-05 | 2017-01-07
    6  | 2017-01-06 | 2017-01-10
    8  | 2017-01-05 | 2017-01-11
    11 | 2017-01-03 | 2017-01-04
    12 | 2017-01-04 | 2017-01-10
    15 | 2017-01-04 | 2017-01-18
    17 | 2017-01-08 | 2017-01-10
    25 | 2017-01-12 | 2017-01-15
    31 | 2017-01-11 | 2017-01-24
    

    enter image description here


    我不想要

    Model::find()
        ->where(['between', 'dateStart', "2017-01-06", "2017-02-11"])
        ->all();
    

    between 不是 in range .

    使用between会导致此错误输出:

    id | dateStart  | dateEnd
    ---+------------+-----------+
    6  | 2017-01-06 | 2017-01-10
    8  | 2017-01-05 | 2017-01-11
    11 | 2017-01-03 | 2017-01-04
    12 | 2017-01-04 | 2017-01-10
    15 | 2017-01-04 | 2017-01-18
    

    E、 g.首选输出:

    2017-01-05 和结束日期<= 2017-01-11 应该如下所示:

    id | dateStart  | dateEnd
    ---+------------+-----------+
    3  | 2017-01-05 | 2017-01-07
    6  | 2017-01-06 | 2017-01-10
    8  | 2017-01-05 | 2017-01-11
    12 | 2017-01-04 | 2017-01-10
    15 | 2017-01-04 | 2017-01-18
    17 | 2017-01-08 | 2017-01-10
    31 | 2017-01-11 | 2017-01-24
    

    1 回复  |  直到 7 年前
        1
  •  2
  •   lin    7 年前

    $dateStart = '2017-01-05';
    $dateEnd = '2017-01-11';
    
    Model::find()
       ->orWhere(['between', 'dateEnd', $dateStart , $dateEnd]) 
       ->orWhere(['between', 'dateStart', $dateStart , $dateEnd]) 
       ->orWhere(['and', "dateEnd>='".$dateEnd."'", "dateStart<='".$dateStart ."'"])
       ->all();