从查询中的日期时间中选择日期 - Yii2

时间:2016-08-08 08:34:53

标签: php yii2

我有一个事件表。其中,due date事件以datetime格式存储。但是,由于需求的某些变化,现在我们只需要在date列中显示due date(不包括时间)。

活动(表格)

id | user_id | description |       due_date          | is_completed

1      8        My Event1    2016-08-09 19:16:00          0
2      8        My Event2    2016-08-09 19:53:00          0

我想在日期明智地展示所有活动。与2016-08-09下的所有活动一样。

所以,我尝试了这个查询。

$upcoming_events = Events::find()->select(['due_date'])->distinct()
           ->where(['user_id' => Yii::$app->users->getId(),'is_completed'=> 0 ])
           ->andWhere(['>=','due_date',date("Y-m-d")])
          ->orderBy(['due_date'=>'ASC'])->limit(5)->all();

但是,现在有2个日期被选为2016-08-09 19:16:00& 2016-08-09 19:53:00。因为,日期部分不是从select语句中获取的。它显示相同日期的2倍。

的var_dump($ upcoming_events);

[1] => app\Events Object
  (
    [_attributes:yii\db\BaseActiveRecord:private] => Array
        (
            [due_date] => 2016-08-09 19:16:00
        )
  )

[2] => app\Events Object
(

  [_attributes:yii\db\BaseActiveRecord:private] => Array
  (
      [due_date] => 2016-08-09 19:53:00
  )
)

如何从日期时间字段中仅检索日期,以便在Yii2查询中仅获取1个日期。

任何帮助/提示/建议都很明显。

4 个答案:

答案 0 :(得分:3)

您也可以只使用日期部分

 upcoming_events = Events::find()->select('date(due_date) as due_date')->distinct()
       ->where(['user_id' => Yii::$app->users->getId(),'is_completed'=> 0 ])
       ->andWhere(['>=','due_date',date("Y-m-d")])
      ->orderBy(['due_date'=>'ASC'])->limit(5)->all();

答案 1 :(得分:0)

以下是使用Yii2模型查询从时间戳获取转换日期的查询。

$upcoming_events     = Yii::$app->$db->createCommand('SELECT  count(DISTINCT(date(due_date))) as edate FROM event_master')
    ->queryAll();


    foreach ($upcoming_events as $upevnts){
    echo $upevnts['edate'];
}

答案 2 :(得分:0)

我在有效查询中搜索了app\build.gradle android-ngn-stack\build.gradle 。我没有得到。所以,我使用了 Command Builder

而且,它有效。

date(due_date)

但即使它有效。我想知道活动查询中的解决方案。

答案 3 :(得分:0)

您可以简单地使用此示例,

YourModelName::find()->where(['date(timestamp)' => php('Y-m-d')]->one(); 

这里的日期将从时间戳列中获取。